Chcete-li v jazyce Python zamíchat (náhodně seřadit) prvky seznamu (pole), použijte modul random standardní knihovny.
Existují dvě funkce: shuffle(), která náhodně setřídí původní seznam, a sample(), která vrátí nový náhodně setříděný seznam. sample() lze použít pro řetězce a tuply.
- Promíchání původního seznamu:
random.shuffle()
- Vytvoří nový, promíchaný seznam.:
random.sample()
- Promíchání řetězců a tuplů
- Oprava osiva náhodného čísla
Pokud chcete řadit vzestupně nebo sestupně místo náhodně nebo v opačném pořadí, podívejte se do následujícího článku.
- Související články:Řazení seznamu v jazyce Python: rozdíl mezi sorted a sorted
Promíchání původního seznamu: random.shuffle()
Funkce shuffle() v modulu random dokáže náhodně seřadit původní seznam.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Vytvoří nový, promíchaný seznam.: random.sample()
Funkci sample() v modulu random lze použít k vytvoření nového náhodně seřazeného seznamu, aniž by se změnil původní seznam.
sample() je funkce, která náhodně vybere a získá prvek ze seznamu. Prvním argumentem je seznam a druhým argumentem je počet prvků, které se mají načíst. Podrobnosti naleznete v následujícím článku.
Pokud je počet prvků, které má funkce sample() vybrat, roven celkovému počtu prvků v seznamu, získáme nový seznam s náhodně seřazenými prvky. Celkový počet prvků v seznamu získáme pomocí len().
Původní objekt se nezmění.
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]
Promíchání řetězců a tuplů
Řetězce a tuply jsou neměnné, takže pokud pomocí random.shuffle() změníte původní objekt, dojde k následující chybě.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
Pokud chcete zamíchat řetězec nebo tuple, použijte funkci random.sample(), která vytvoří nový objekt.
I když je jako argument zadán řetězec nebo tuple, funkce random.sample() vrací seznam, takže je nutné jej zpracovat zpět na řetězec nebo tuple.
V případě řetězce se jedná o seznam znaků po jednom. Chcete-li je opět spojit do jednoho řetězce, použijte metodu join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Pro tuply použijte funkci tuple(), která vytvoří tuple ze seznamu.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Oprava osiva náhodného čísla
Zadáním libovolného celého čísla do funkce seed() modulu random lze stanovit semeno náhodného čísla a inicializovat generátor náhodných čísel.
Po inicializaci stejným semínkem se vždy stejným způsobem přeřadí.
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]