Aşağıdaki listeye sahip olduğumu varsayalım:
foo = ['a', 'b', 'c', 'd', 'e']
Bu listeden rastgele bir öğe almanın en basit yolu nedir?
random.choice()
kullanabiliriz:
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
Şifreleme açısından güvenli rastgele seçimler için ise (örneğin, bir sözcük listesinden parola oluşturmak için), secrets.choice()
kullanılabilir:
import secrets
foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))
secrets
Python 3.6’da geldi. Bu yüzden Python’un eski sürümlerinde
sınıfı kullanılabilir:random.SystemRandom
import random
secure_random = random.SystemRandom()
print(secure_random.choice(foo))
Birden fazla rastgele öğe seçmek
Listeden rastgele birden fazla öğe seçmek istiyorsanız, bunun yerine random.sample
kullanmanızı öneririm.
import random
listem = {'a', 'b', 'c', 'd', 'e'}
secme_sayisi = 2
rastgele_ogeler = random.sample(listem, secme_sayisi)
ilk_rastgele_oge = rastgele_ogeler[0]
ikinci_rastgele_oge = rastgele_ogeler[1]
Yine de listeden yalnızca tek bir öğe çekiyorsanız, random.sample
kullanmak yerine daha az hantal olan random.choice kullanmak daha mantıklı olacaktır.
Dizine de ihtiyacınız varsa random.randrange
kullanın
from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])
Listeden rastgele öğe çıkararak listeyi boşaltma
Liste boşalana kadar rastgele öğeleri çekip listeyi boşaltmak için aşağıdaki kodu kullanabiliriz:
s=set(range(1,6))
import random
while len(s)>0:
s.remove(random.choice(list(s)))
print(s)
Bu kodu üç kere çalıştırırsak aşağıdaki çıktıyı alırız:
>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])
>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])