Ak chcete v jazyku Python premiešať (náhodne zoradiť) prvky zoznamu (poľa), použite modul random štandardnej knižnice.
Existujú dve funkcie: shuffle(), ktorá náhodne zoradí pôvodný zoznam, a sample(), ktorá vráti nový náhodne zoradený zoznam. sample() možno použiť pre reťazce a kôpky.
- Premiešanie pôvodného zoznamu:
random.shuffle()
- Vygenerujte nový, premiešaný zoznam.:
random.sample()
- Premiešavanie reťazcov a tuplov
- Oprava osiva náhodného čísla
Ak chcete triediť vzostupne alebo zostupne namiesto náhodného poradia alebo v opačnom poradí, pozrite si nasledujúci článok.
Premiešanie pôvodného zoznamu: random.shuffle()
Funkcia shuffle() v module random dokáže náhodne zoradiť pôvodný zoznam.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Vygenerujte nový, premiešaný zoznam.: random.sample()
Funkciu sample() v module random možno použiť na vytvorenie nového náhodne zoradeného zoznamu bez zmeny pôvodného zoznamu.
sample() je funkcia, ktorá náhodne vyberie a načíta prvok zo zoznamu. Prvým argumentom je zoznam a druhým argumentom je počet prvkov, ktoré sa majú získať. Podrobnosti nájdete v nasledujúcom článku.
Ak je počet prvkov, ktoré sa majú vybrať pomocou funkcie sample(), rovný celkovému počtu prvkov v zozname, dostaneme nový zoznam so všetkými prvkami náhodne zoradenými. Celkový počet prvkov v zozname získame pomocou funkcie len().
Pôvodný objekt sa nezmení.
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]
Premiešavanie reťazcov a tuplov
Reťazce a tuply sú nemenné, takže ak použijete random.shuffle() na zmenu pôvodného objektu, dostanete nasledujúcu chybu.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
Ak chcete zamiešať reťazec alebo tuple, použite random.sample(), ktorý vytvorí nový objekt.
Aj keď je ako argument zadaný reťazec alebo tuple, random.sample() vráti zoznam, takže je potrebné ho spracovať späť na reťazec alebo tuple.
V prípade reťazca to bude zoznam znakov jeden po druhom. Ak ich chcete opäť spojiť do jedného reťazca, použite metódu join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Pre tuple použite funkciu tuple(), ktorá vytvorí tuple zo zoznamu.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Oprava osiva náhodného čísla
Zadaním ľubovoľného celého čísla funkcii seed() modulu random je možné stanoviť semeno náhodného čísla a inicializovať generátor náhodných čísel.
Po inicializácii s rovnakým semienkom sa vždy preusporiada rovnakým spôsobom.
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]