Elemek keverése egy listában Pythonban

Üzleti

Ha Pythonban egy lista (tömb) elemeit szeretnénk megkeverni (véletlenszerűen rendezni), használjuk a szabványos könyvtár random modulját.

Két függvény van: a shuffle(), amely véletlenszerűen rendezi az eredeti listát, és a sample(), amely egy új, véletlenszerűen rendezett listát ad vissza. sample() használható stringekre és tuplikra.

  • Az eredeti lista keverése:random.shuffle()
  • Új, kevert lista létrehozása.:random.sample()
  • Sztringek és tuplik keverése
  • A véletlen számok magjának rögzítése

Ha véletlenszerű helyett növekvő vagy csökkenő sorrendben, illetve fordított sorrendben szeretne rendezni, olvassa el a következő cikket.

Az eredeti lista keverése: random.shuffle()

A random modul shuffle() függvénye véletlenszerűen rendezi az eredeti listát.

import random

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

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

Új, kevert lista létrehozása.: random.sample()

A random modul sample() függvénye használható egy új, véletlenszerűen rendezett lista létrehozására, az eredeti lista megváltoztatása nélkül.

A sample() egy olyan függvény, amely véletlenszerűen kiválaszt és kinyer egy elemet egy listából. Az első argumentum egy lista, a második argumentum pedig a kinyerendő elemek száma. A részleteket lásd a következő cikkben.

Ha a sample() által kiválasztandó elemek száma megegyezik a lista összes elemének számával, akkor egy új listát kapunk, amelynek minden eleme véletlenszerűen van rendezve. A lista összes elemének számát a len() segítségével kapjuk meg.

Az eredeti objektum nem változik.

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]

Sztringek és tuplik keverése

A karakterláncok és a tuple-ok megváltoztathatatlanok, így ha a random.shuffle() segítségével megváltoztatjuk az eredeti objektumot, a következő hibát kapjuk.
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

Ha egy karakterláncot vagy egy tuple-t akarsz megkeverni, használd a random.sample() parancsot, amely egy új objektumot hoz létre.

A random.sample() még akkor is listát ad vissza, ha egy karakterláncot vagy tömböt ad meg argumentumként, így azt vissza kell dolgozni egy karakterlánccá vagy tömbté.

Egy karakterlánc esetében ez a karakterek listája lesz egyenként. Ahhoz, hogy ezeket ismét egyetlen karakterlánccá fűzzük össze, használjuk a join() metódust.

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

Tuplikhoz használd a tuple() funkciót, amely egy listából létrehoz egy tuplát.

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

A véletlen számok magjának rögzítése

A random modul seed() függvényének egy tetszőleges egész szám megadásával rögzíthető a véletlenszám-vetőmag és inicializálható a véletlenszám-generátor.

Az azonos maggal történő inicializálás után mindig ugyanúgy átrendeződik.

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]
Copied title and URL