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.
- Relaterede artikler:Sortering af en liste i Python: forskellen mellem sorteret og sorteret
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.
- Relaterede artikler:Vælg tilfældigt elementer fra en liste i Python:
choice()
,sample()
,choices()
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]