Jika anda ingin mengocok (isih secara rawak) elemen senarai (tatasusunan) dalam Python, gunakan modul rawak perpustakaan standard.
Terdapat dua fungsi: shuffle(), yang mengisih senarai asal secara rawak, dan sample(), yang mengembalikan senarai diisih secara rawak baharu. sample() boleh digunakan untuk rentetan dan tupel.
- Kocok senarai asal:
random.shuffle()
- Hasilkan senarai baharu yang dikocok.:
random.sample()
- Kocok rentetan dan tupel
- Betulkan benih nombor rawak
Jika anda ingin mengisih dalam tertib menaik atau menurun dan bukannya rawak, atau dalam susunan terbalik, lihat artikel berikut.
- Artikel berkaitan:Mengisih senarai dalam Python: perbezaan antara diisih dan diisih
Kocok senarai asal:random.shuffle()
Fungsi shuffle() dalam modul rawak boleh mengisih senarai asal secara rawak.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Hasilkan senarai baharu yang dikocok.:random.sample()
Sampel fungsi() dalam modul rawak boleh digunakan untuk mencipta senarai baharu yang diisih secara rawak, tanpa mengubah senarai asal.
sample() ialah fungsi yang secara rawak memilih dan mendapatkan semula elemen daripada senarai. Argumen pertama ialah senarai, dan argumen kedua ialah bilangan elemen yang perlu diambil. Lihat artikel berikut untuk butirannya.
- Artikel berkaitan:Pilih elemen secara rawak daripada senarai dalam Python:
choice()
,sample()
,choices()
Jika bilangan elemen yang akan dipilih oleh sample() ialah jumlah bilangan elemen dalam senarai, kami mendapat senarai baharu dengan semua elemen disusun secara rawak. Jumlah bilangan elemen dalam senarai diperolehi oleh len().
Objek asal tidak akan diubah.
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]
Kocok rentetan dan tupel
Rentetan dan tupel tidak boleh diubah, jadi jika anda menggunakan random.shuffle() untuk menukar objek asal, anda akan mendapat ralat berikut.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
Jika anda ingin mengocok rentetan atau tupel, gunakan random.sample(), yang mencipta objek baharu.
Walaupun rentetan atau tupel dinyatakan sebagai argumen, random.sample() mengembalikan senarai, jadi ia perlu memprosesnya kembali kepada rentetan atau tupel.
Dalam kes rentetan, ia akan menjadi senarai aksara satu demi satu. Untuk menggabungkannya menjadi satu rentetan sekali lagi, gunakan kaedah join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Untuk tupel, gunakan tuple(), yang mencipta tupel daripada senarai.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Betulkan benih nombor rawak
Dengan memberikan integer arbitrari kepada seed() fungsi modul rawak, benih nombor rawak boleh dibetulkan dan penjana nombor rawak boleh dimulakan.
Selepas pemulaan dengan benih yang sama, ia sentiasa disusun semula dengan cara yang sama.
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]