Stokkaðu þætti á lista í Python

Viðskipti

Ef þú vilt stokka (af handahófi) þætti lista (fylkis) í Python skaltu nota handahófskenndu eininguna í staðlaða bókasafninu.

Það eru tvær aðgerðir: shuffle(), sem raðar upprunalega listann af handahófi, og sample(), sem skilar nýjum handahófsröðuðum lista. sample() er hægt að nota fyrir strengi og tuple.

  • Stokkaðu upprunalega listann:random.shuffle()
  • Búðu til nýjan, stokkaðan lista.:random.sample()
  • Shuffle strengir og tuples
  • Lagaðu slembitölufræið

Ef þú vilt raða í hækkandi eða lækkandi röð í stað handahófs, eða í öfugri röð, skoðaðu eftirfarandi grein.

Stokkaðu upprunalega listann:random.shuffle()

Aðgerðin shuffle() í handahófskenndu einingunni getur raðað upprunalega listanum af handahófi.

import random

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

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

Búðu til nýjan, stokkaðan lista.:random.sample()

Fallið sample() í slembieiningunni er hægt að nota til að búa til nýjan lista sem er flokkaður af handahófi, án þess að breyta upprunalega listanum.

sample() er fall sem velur og sækir stak af lista af handahófi. Fyrsta röksemdin er listi og seinni röksemdin er fjöldi þátta sem á að sækja. Sjá eftirfarandi grein fyrir frekari upplýsingar.

Ef fjöldi þátta sem á að velja með sample() er heildarfjöldi þátta á listanum fáum við nýjan lista með öllum þáttum raðað af handahófi. Heildarfjöldi þátta í listanum er fenginn með len().

Upprunalega hlutnum verður ekki breytt.

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]

Shuffle strengir og tuples

Strengir og tuples eru óbreytanlegir, þannig að ef þú notar random.shuffle() til að breyta upprunalega hlutnum færðu eftirfarandi villu.
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

Ef þú vilt stokka streng eða tuple, notaðu random.sample(), sem býr til nýjan hlut.

Jafnvel þegar strengur eða tuple er tilgreindur sem viðfang, skilar random.sample() lista, svo það er nauðsynlegt að vinna hann aftur í streng eða tuple.

Ef um er að ræða streng verður það listi yfir stafi einn í einu. Til að sameina þær í einn streng aftur, notaðu join() aðferðina.

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

Fyrir tuple, notaðu tuple(), sem býr til tuple úr lista.

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

Lagaðu slembitölufræið

Með því að gefa handahófskennda heiltölu fyrir virkni slembieiningarinnar seed(), er hægt að laga slembitölukornið og frumstilla slembitöluframleiðandann.

Eftir frumstillingu með sama fræi er það alltaf endurraðað á sama hátt.

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]