Jos haluat sekoittaa (satunnaisesti lajitella) luettelon (array) elementtejä Pythonissa, käytä standardikirjaston random-moduulia.
Funktioita on kaksi: shuffle(), joka lajittelee alkuperäisen listan satunnaisesti, ja sample(), joka palauttaa uuden satunnaisesti lajitellun listan. sample() voidaan käyttää merkkijonoille ja monisteille.
- Alkuperäisen luettelon sekoittaminen:
random.shuffle()
- Luo uusi, sekoitettu luettelo.:
random.sample()
- Sekoita merkkijonoja ja tupleja
- Vahvista satunnaislukujen siemen
Jos haluat lajitella satunnaisjärjestyksen sijasta nousevassa tai laskevassa järjestyksessä tai käänteisessä järjestyksessä, katso seuraava artikkeli.
- Aiheeseen liittyvät artikkelit:Listan lajittelu Pythonissa: ero lajitellun ja lajitellun välillä
Alkuperäisen luettelon sekoittaminen: random.shuffle()
Satunnaismoduulin funktio shuffle() voi lajitella alkuperäisen luettelon satunnaisesti.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Luo uusi, sekoitettu luettelo.: random.sample()
Random-moduulin funktiolla sample() voidaan luoda uusi satunnaisesti lajiteltu lista muuttamatta alkuperäistä listaa.
sample() on funktio, joka valitsee ja hakee satunnaisesti elementin listasta. Ensimmäinen argumentti on lista ja toinen argumentti on haettavien elementtien määrä. Katso lisätietoja seuraavasta artikkelista.
- Aiheeseen liittyvät artikkelit:Valitse satunnaisesti elementtejä luettelosta Pythonissa:
choice()
,sample()
,choices()
Jos sample():lla valittavien elementtien määrä on listan elementtien kokonaismäärä, saadaan uusi lista, jonka kaikki elementit on lajiteltu satunnaisesti. Listan elementtien kokonaismäärä saadaan len()-operaatiolla.
Alkuperäistä kohdetta ei muuteta.
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]
Sekoita merkkijonoja ja tupleja
Merkkijonot ja tuplet ovat muuttumattomia, joten jos käytät random.shuffle()-ohjelmaa alkuperäisen objektin muuttamiseen, saat seuraavan virheilmoituksen.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
Jos haluat sekoittaa merkkijonon tai tuplen, käytä random.sample() -toimintoa, joka luo uuden objektin.
Jopa silloin, kun argumenttina on merkkijono tai tuple, random.sample() palauttaa listan, joten se on tarpeen käsitellä takaisin merkkijonoksi tai tuplaksi.
Jos kyseessä on merkkijono, se on lista merkkejä yksi kerrallaan. Jos haluat liittää ne jälleen yhdeksi merkkijonoksi, käytä join()-metodia.
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Käytä tuple() -toimintoa, joka luo listasta tuplen.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Vahvista satunnaislukujen siemen
Antamalla satunnaismoduulin funktiolle seed() mielivaltainen kokonaisluku, satunnaislukujen siemen voidaan määrittää ja satunnaislukugeneraattori voidaan alustaa.
Kun se on alustettu samalla siemenellä, se järjestetään aina uudelleen samalla tavalla.
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]