Schud de elementen in een lijst in Python

Bedrijf

Als je de elementen van een lijst (array) in Python wilt shuffelen (willekeurig sorteren), gebruik je de random module van de standaard bibliotheek.

Er zijn twee functies: shuffle(), die de oorspronkelijke lijst willekeurig sorteert, en sample(), die een nieuwe willekeurig gesorteerde lijst teruggeeft. sample() kan gebruikt worden voor strings en tupels.

  • Shuffle de originele lijst:random.shuffle()
  • Genereer een nieuwe, geschudde lijst.:random.sample()
  • Shuffle strings en tupels
  • Zet het zaad van de willekeurige getallen vast

Als u wilt sorteren in oplopende of aflopende volgorde in plaats van in willekeurige volgorde, of in omgekeerde volgorde, zie het volgende artikel.

Shuffle de originele lijst: random.shuffle()

De functie shuffle() in de random module kan de oorspronkelijke lijst willekeurig sorteren.

import random

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

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

Genereer een nieuwe, geschudde lijst.: random.sample()

De functie sample() in de random module kan gebruikt worden om een nieuwe lijst te maken die willekeurig gesorteerd is, zonder de originele lijst te veranderen.

sample() is een functie die willekeurig een element uit een lijst selecteert en ophaalt. Het eerste argument is een lijst, en het tweede argument is het aantal elementen dat moet worden opgehaald. Zie het volgende artikel voor details.

Als het aantal elementen dat geselecteerd moet worden door sample() gelijk is aan het totale aantal elementen in de lijst, krijgen we een nieuwe lijst met alle elementen willekeurig gesorteerd. Het totaal aantal elementen in de lijst wordt verkregen door len().

Het oorspronkelijke object wordt niet gewijzigd.

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 strings en tupels

Strings en tuples zijn onveranderlijk, dus als je random.shuffle() gebruikt om het originele object te veranderen, krijg je de volgende foutmelding.
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

Als je een string of tupel wilt shuffelen, gebruik dan random.sample(), dat een nieuw object maakt.

Zelfs wanneer een string of tupel als argument wordt opgegeven, retourneert random.sample() een lijst, dus is het nodig om deze terug te verwerken tot een string of tupel.

In het geval van een string, zal het een lijst zijn van karakters één voor één. Om ze weer samen te voegen tot een enkele string, gebruik je de join() methode.

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

Voor tupels, gebruik tuple(), dat een tupel maakt van een lijst.

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

Zet het zaad van de willekeurige getallen vast

Door een willekeurig geheel getal aan de functie seed() van de random module te geven, kan het random getalzaad worden vastgesteld en kan de random getalgenerator worden geïnitialiseerd.

Na initialisatie met hetzelfde zaad, wordt het altijd op dezelfde manier herschikt.

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