Listan elementtien sekoittaminen Pythonissa

liiketoiminta

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.

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.

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