Premešanje elementov na seznamu v programu Python

Posel

Če želite v Pythonu premešati (naključno razvrstiti) elemente seznama (polja), uporabite modul random standardne knjižnice.

Na voljo sta dve funkciji: shuffle(), ki naključno razvrsti prvotni seznam, in sample(), ki vrne nov naključno razvrščen seznam. funkcijo sample() je mogoče uporabiti za nize in kupole.

  • Premešanje prvotnega seznama:random.shuffle()
  • Ustvarite nov, premešani seznam.:random.sample()
  • Premikanje nizov in tuplov
  • Določite seme naključne številke

Če želite razvrščati po naraščajočem ali padajočem vrstnem redu namesto naključno ali v obratnem vrstnem redu, glejte naslednji članek.

Premešanje prvotnega seznama: random.shuffle()

Funkcija shuffle() v modulu random lahko naključno razvrsti prvotni seznam.

import random

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

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

Ustvarite nov, premešani seznam.: random.sample()

S funkcijo sample() v modulu random lahko ustvarite nov seznam, ki je naključno razvrščen, ne da bi spremenili prvotni seznam.

sample() je funkcija, ki naključno izbere in pridobi element s seznama. Prvi argument je seznam, drugi argument pa število elementov, ki jih je treba pridobiti. Za podrobnosti glejte naslednji članek.

Če je število elementov, ki jih izbere funkcija sample(), enako skupnemu številu elementov na seznamu, dobimo nov seznam z naključno razvrščenimi elementi. Skupno število elementov na seznamu dobimo s funkcijo len().

Izvirni predmet se ne spremeni.

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]

Premikanje nizov in tuplov

Nizi in nizi so nespremenljivi, zato se bo ob uporabi funkcije random.shuffle() za spremembo prvotnega predmeta pojavila naslednja napaka.
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

Če želite premešati niz ali tuple, uporabite ukaz random.sample(), ki ustvari nov objekt.

Tudi če je kot argument naveden niz ali tuple, funkcija random.sample() vrne seznam, zato ga je treba obdelati nazaj v niz ali tuple.

V primeru niza je to seznam znakov, ki si sledijo eden za drugim. Če jih želite ponovno združiti v en sam niz, uporabite metodo join().

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

Za tuple uporabite funkcijo tuple(), ki iz seznama ustvari tuple.

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

Določite seme naključne številke

S podajanjem poljubnega celega števila funkciji seed() modula random lahko določite seme naključnega števila in inicializirate generator naključnih števil.

Po inicializaciji z istim semenom se vedno preuredi na enak 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]