Blanda element i en lista i Python

Företag

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.

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.

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