Mischen von Elementen in einer Liste in Python

Geschäft

Wenn Sie die Elemente einer Liste (Array) in Python mischen (zufällig sortieren) wollen, verwenden Sie das Modul random der Standardbibliothek.

Es gibt zwei Funktionen: shuffle(), die die ursprüngliche Liste nach dem Zufallsprinzip sortiert, und sample(), die eine neue, nach dem Zufallsprinzip sortierte Liste zurückgibt. sample() kann für Strings und Tupel verwendet werden.

  • Die ursprüngliche Liste mischen:random.shuffle()
  • Erzeugen Sie eine neue, gemischte Liste.:random.sample()
  • Strings und Tupel mischen
  • Den Zufallszahlen-Seed festlegen

Wenn Sie in aufsteigender oder absteigender Reihenfolge statt in zufälliger Reihenfolge oder in umgekehrter Reihenfolge sortieren möchten, lesen Sie den folgenden Artikel.

Die ursprüngliche Liste mischen: random.shuffle()

Die Funktion shuffle() im Modul random kann die ursprüngliche Liste zufällig sortieren.

import random

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

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

Erzeugen Sie eine neue, gemischte Liste.: random.sample()

Mit der Funktion sample() im Modul random kann eine neue Liste erstellt werden, die nach dem Zufallsprinzip sortiert ist, ohne die ursprüngliche Liste zu verändern.

sample() ist eine Funktion, die nach dem Zufallsprinzip ein Element aus einer Liste auswählt und abruft. Das erste Argument ist eine Liste, und das zweite Argument ist die Anzahl der Elemente, die abgerufen werden sollen. Siehe den folgenden Artikel für weitere Einzelheiten.

Wenn die Anzahl der durch sample() auszuwählenden Elemente der Gesamtzahl der Elemente in der Liste entspricht, erhalten wir eine neue Liste mit allen zufällig sortierten Elementen. Die Gesamtzahl der Elemente in der Liste wird durch len() ermittelt.

Das ursprüngliche Objekt wird nicht verändert.

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]

Strings und Tupel mischen

Strings und Tupel sind unveränderlich. Wenn Sie also random.shuffle() verwenden, um das ursprüngliche Objekt zu ändern, erhalten Sie folgenden Fehler.
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

Wenn Sie eine Zeichenkette oder ein Tupel mischen wollen, verwenden Sie random.sample(), das ein neues Objekt erzeugt.

Auch wenn eine Zeichenkette oder ein Tupel als Argument angegeben wird, gibt random.sample() eine Liste zurück, so dass es notwendig ist, sie wieder in eine Zeichenkette oder ein Tupel umzuwandeln.

Im Falle einer Zeichenkette handelt es sich um eine Liste von Zeichen, die nacheinander angeordnet werden. Um sie wieder zu einer einzigen Zeichenkette zu verketten, verwenden Sie die Methode join().

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

Für Tupel verwenden Sie tuple(), das ein Tupel aus einer Liste erzeugt.

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

Den Zufallszahlen-Seed festlegen

Durch Übergabe einer beliebigen ganzen Zahl an die Funktion seed() des Zufallsmoduls kann der Zufallszahlen-Seed festgelegt und der Zufallszahlengenerator initialisiert werden.

Nach der Initialisierung mit demselben Seed wird sie immer auf dieselbe Weise neu geordnet.

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]