Om du vill blanda (slumpmässigt sortera) elementen i en lista (array) i Python använder du standardbibliotekets randommodul.
Det finns två funktioner: shuffle(), som slumpmässigt sorterar den ursprungliga listan, och sample(), som returnerar en ny slumpmässigt sorterad lista. sample() kan användas för strängar och tupler.
- Blanda den ursprungliga listan:
random.shuffle()
- Skapa en ny, blandad lista.:
random.sample()
- Blanda strängar och tupler
- Fastställa fröet för det slumpmässiga numret
Om du vill sortera i stigande eller fallande ordning i stället för slumpmässigt, eller i omvänd ordning, kan du läsa följande artikel.
- Relaterade artiklar:Sortera en lista i Python: skillnaden mellan sorterad och sorterad
Blanda den ursprungliga listan: random.shuffle()
Funktionen shuffle() i random-modulen kan slumpmässigt sortera den ursprungliga listan.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Skapa en ny, blandad lista.: random.sample()
Funktionen sample() i random-modulen kan användas för att skapa en ny lista som är slumpmässigt sorterad utan att ändra den ursprungliga listan.
sample() är en funktion som slumpmässigt väljer och hämtar ett element från en lista. Det första argumentet är en lista och det andra argumentet är antalet element som ska hämtas. Se följande artikel för mer information.
- Relaterade artiklar:Slumpmässigt välja element från en lista i Python:
choice()
,sample()
,choices()
Om antalet element som ska väljas ut av sample() är det totala antalet element i listan får vi en ny lista med alla element slumpmässigt sorterade. Det totala antalet element i listan fås med len().
Det ursprungliga objektet ändras inte.
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]
Blanda strängar och tupler
Strängar och tupler är oföränderliga, så om du använder random.shuffle() för att ändra det ursprungliga objektet får du följande fel.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
Om du vill blanda en sträng eller tupel använder du random.sample(), som skapar ett nytt objekt.
Även när en sträng eller tupel anges som argument returnerar random.sample() en lista, så det är nödvändigt att bearbeta den tillbaka till en sträng eller tupel.
När det gäller en sträng är det en lista med tecken ett efter ett. För att sammanfoga dem till en enda sträng igen använder du metoden join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
För tupler använder du tuple(), som skapar en tupel från en lista.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Fastställa fröet för det slumpmässiga numret
Genom att ge ett godtyckligt heltal till random-modulens funktion seed() kan slumptalsfröet fastställas och slumptalsgeneratorn initialiseras.
Efter initialisering med samma frö, omordnas det alltid på samma sä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]