Kui soovite Pythonis loendi (massiivi) elemente segi ajada (juhuslikult sorteerida), kasutage standardraamatukogu juhuslikkuse moodulit.
On kaks funktsiooni: shuffle(), mis sorteerib esialgse loendi juhuslikult, ja sample(), mis tagastab uue juhuslikult sorteeritud loendi. sample() saab kasutada stringide ja tuplite puhul.
- Algse nimekirja segamine:
random.shuffle()
- Looge uus, segatud nimekiri.:
random.sample()
- Stringide ja tuplite segamine
- Juhusliku arvu seemne fikseerimine
Kui soovite sorteerida juhusliku järjestuse asemel kasvavas või kahanevas järjekorras või vastupidises järjekorras, vaadake järgmist artiklit.
Algse nimekirja segamine: random.shuffle()
Funktsioon shuffle() juhuslikus moodulis saab algset nimekirja juhuslikult sorteerida.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Looge uus, segatud nimekiri.: random.sample()
Random-mooduli funktsiooni sample() saab kasutada uue juhuslikult sorteeritud loendi loomiseks, ilma algset loendit muutmata.
sample() on funktsioon, mis valib juhuslikult elemendi loendist ja võtab selle välja. Esimene argument on nimekiri ja teine argument on välja otsitavate elementide arv. Vaata üksikasju järgmises artiklis.
Kui proovi() abil valitavate elementide arv on sama suur kui nimekirja elementide koguarv, saame uue nimekirja, mille kõik elemendid on juhuslikult sorteeritud. Nimekirja elementide koguarv saadakse len() abil.
Esialgset objekti ei muudeta.
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]
Stringide ja tuplite segamine
Stringid ja tuplid on muutumatud, nii et kui te kasutate random.shuffle() algse objekti muutmiseks, saate järgmise vea.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
Kui soovite segada stringi või tupli, kasutage random.sample(), mis loob uue objekti.
Isegi kui argumendiks on määratud string või tupel, tagastab random.sample() loendi, nii et seda on vaja töödelda tagasi stringiks või tupeliks.
Stringi puhul on see ükshaaval tähemärkide nimekiri. Et neid taas üheks stringiks liita, kasutage meetodit join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Tuplite jaoks kasutage tuple(), mis loob loendist tupli.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Juhusliku arvu seemne fikseerimine
Andes juhusliku mooduli funktsioonile seed() suvalise täisarvu, saab juhusliku arvu seemne fikseerida ja juhusliku arvu generaatori initsialiseerida.
Pärast initsialiseerimist sama seemnega järjestatakse see alati samamoodi ümber.
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]