Přehazování prvků v seznamu v jazyce Python

Podnikání

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.

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]