Promiješaj elemente na popisu u Pythonu

Poslovanje

Ako želite miješati (nasumično sortirati) elemente popisa (niza) u Pythonu, upotrijebite nasumični modul standardne biblioteke.

Postoje dvije funkcije: shuffle(), koja nasumično sortira izvorni popis, i sample(), koja vraća novi nasumično sortirani popis. sample() se može koristiti za nizove i torke.

  • Promiješajte izvorni popis:random.shuffle()
  • Generirajte novi, pomiješani popis.:random.sample()
  • Promiješaj nizove i torke
  • Popravite nasumični broj

Ako želite sortirati uzlaznim ili silaznim redoslijedom umjesto slučajnim ili obrnutim redoslijedom, pogledajte sljedeći članak.

Promiješajte izvorni popis:random.shuffle()

Funkcija shuffle() u random modulu može nasumično sortirati izvorni popis.

import random

l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]

random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]

Generirajte novi, pomiješani popis.:random.sample()

Funkcija sample() u random modulu može se koristiti za stvaranje novog popisa koji je nasumično sortiran, bez promjene izvornog popisa.

sample() je funkcija koja nasumično odabire i dohvaća element s popisa. Prvi argument je popis, a drugi argument je broj elemenata koji se trebaju dohvatiti. Za detalje pogledajte sljedeći članak.

Ako je broj elemenata koje treba odabrati pomoću sample() ukupan broj elemenata na popisu, dobivamo novi popis sa svim elementima nasumično sortiranim. Ukupan broj elemenata na popisu dobiva se pomoću len().

Izvorni objekt neće biti promijenjen.

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]

Promiješaj nizove i torke

Nizovi i torke su nepromjenjivi, pa ako koristite random.shuffle() za promjenu izvornog objekta, dobit ćete sljedeću pogrešku.
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

Ako želite promiješati niz ili tuple, koristite random.sample(), koji stvara novi objekt.

Čak i kada je niz ili torka naveden kao argument, random.sample() vraća popis, pa ga je potrebno obraditi natrag u niz ili torku.

U slučaju niza, to će biti popis znakova jedan po jedan. Da biste ih ponovno spojili u jedan niz, upotrijebite metodu join().

sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca

Za torke, koristite tuple(), koji stvara torku iz popisa.

tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)

Popravite nasumični broj

Davanjem proizvoljnog cijelog broja funkciji seed(), seed nasumičnih brojeva može se fiksirati i generator slučajnih brojeva se može inicijalizirati.

Nakon inicijalizacije s istim sjemenom, uvijek se preuređuje na isti način.

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]