Blanding af elementer i en liste i Python

Forretning

Hvis du vil blande (tilfældigt sortere) elementerne i en liste (array) i Python, skal du bruge random-modulet i standardbiblioteket.

Der er to funktioner: shuffle(), som tilfældigt sorterer den oprindelige liste, og sample(), som returnerer en ny tilfældigt sorteret liste. sample() kan bruges til strings og tupler.

  • Blanding af den oprindelige liste:random.shuffle()
  • Generer en ny, blandet liste.:random.sample()
  • Blanding af strenge og tupler
  • Fastsæt det tilfældige talfrø

Hvis du ønsker at sortere i stigende eller faldende rækkefølge i stedet for tilfældig rækkefølge eller i omvendt rækkefølge, kan du læse følgende artikel.

Blanding af den oprindelige liste: random.shuffle()

Funktionen shuffle() i random-modulet kan sortere den oprindelige liste på tilfældig vis.

import random

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

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

Generer en ny, blandet liste.: random.sample()

Funktionen sample() i random-modulet kan bruges til at oprette en ny liste, der er tilfældigt sorteret, uden at ændre den oprindelige liste.

sample() er en funktion, der tilfældigt udvælger og henter et element fra en liste. Det første argument er en liste, og det andet argument er antallet af elementer, der skal hentes. Se følgende artikel for nærmere oplysninger.

Hvis antallet af elementer, der skal udvælges af sample(), er det samlede antal elementer i listen, får vi en ny liste med alle elementer tilfældigt sorteret. Det samlede antal elementer i listen fås ved len().

Det oprindelige objekt vil ikke blive ændret.

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]

Blanding af strenge og tupler

Strings og tupler er uforanderlige, så hvis du bruger random.shuffle() til at ændre det oprindelige objekt, vil du få følgende fejl.
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

Hvis du vil blande en streng eller tupel, skal du bruge random.sample(), som opretter et nyt objekt.

Selv når der er angivet en streng eller tupel som argument, returnerer random.sample() en liste, så det er nødvendigt at behandle den tilbage til en streng eller tupel.

Hvis der er tale om en streng, er det en liste over tegn et efter et. Hvis du vil sammenkæde dem til en enkelt streng igen, skal du bruge join()-metoden.

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

For tupler skal du bruge tuple(), som opretter en tupel fra en liste.

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

Fastsæt det tilfældige talfrø

Ved at give et vilkårligt heltal til random-modulets funktion seed(), kan tilfældige talfrø fastsættes, og generatoren af tilfældige tal kan initialiseres.

Efter initialisering med det samme frø er det altid omordnet på samme måde.

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