Python’da bir listenin (dizinin) öğelerini karıştırmak (rastgele sıralamak) istiyorsanız, standart kitaplığın rastgele modülünü kullanın.
İki işlev vardır: orijinal listeyi rastgele sıralayan shuffle() ve rastgele sıralanmış yeni bir liste döndüren sample(). sample() karakter dizileri ve demetler için kullanılabilir.
- Orijinal listeyi karıştır:
random.shuffle()
- Yeni, karıştırılmış bir liste oluşturun.:
random.sample()
- Dizeleri ve demetleri karıştır
- Rastgele sayı tohumunu düzelt
Rastgele yerine artan veya azalan düzende veya ters sırada sıralamak istiyorsanız, aşağıdaki makaleye bakın.
Orijinal listeyi karıştır:random.shuffle()
Rastgele modülündeki shuffle() işlevi, orijinal listeyi rastgele sıralayabilir.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Yeni, karıştırılmış bir liste oluşturun.:random.sample()
Rastgele modülündeki örnek() işlevi, orijinal listeyi değiştirmeden rastgele sıralanmış yeni bir liste oluşturmak için kullanılabilir.
sample(), bir listeden bir öğeyi rastgele seçen ve alan bir işlevdir. İlk argüman bir listedir ve ikinci argüman alınacak elemanların sayısıdır. Ayrıntılar için aşağıdaki makaleye bakın.
Sample() tarafından seçilecek eleman sayısı, listedeki toplam eleman sayısıysa, tüm elemanların rastgele sıralandığı yeni bir liste alırız. Listedeki toplam eleman sayısı len() ile elde edilir.
Orijinal nesne değiştirilmeyecektir.
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]
print(l)
# [0, 1, 2, 3, 4]
Dizeleri ve demetleri karıştır
Dizeler ve demetler değişmezdir, bu nedenle orijinal nesneyi değiştirmek için random.shuffle() işlevini kullanırsanız aşağıdaki hatayı alırsınız.TypeError
s = 'abcde'
# random.shuffle(s)
# TypeError: 'str' object does not support item assignment
t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)
# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment
Bir dizeyi veya demeti karıştırmak istiyorsanız, yeni bir nesne oluşturan random.sample() öğesini kullanın.
Argüman olarak bir dize veya demet belirtilmiş olsa bile, random.sample() bir liste döndürür, bu nedenle onu bir dize veya demete geri işlemek gerekir.
Bir dize durumunda, karakterlerin birer birer listesi olacaktır. Bunları tekrar tek bir dizede birleştirmek için join() yöntemini kullanın.
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Tuple’lar için, bir listeden bir tuple oluşturan tuple()’ı kullanın.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Rastgele sayı tohumunu düzelt
Rastgele modülün seed() işlevine rasgele bir tamsayı vererek, rasgele sayı tohumu sabitlenebilir ve rasgele sayı üreteci başlatılabilir.
Aynı tohumla başlatıldıktan sonra, her zaman aynı şekilde yeniden sıralanır.
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]