
In Python können Sie mit choice(), sample() und choice() des random-Moduls zufällig Elemente aus einer Liste auswählen. Diese Funktionen können auch auf einen String und eine Tupel angewendet werden.
choice() gibt ein zufälliges Element zurück, und sample() und choice() geben eine Liste mit mehreren zufälligen Elementen zurück. sample() WIRD für zufällige Stichproben ohne Zurücklegen used, und choice() WIRD für zufällige Stichproben mit Zurücklegen used.
Dieser Artikel hat folgenden Inhalt.
- Wähle ein zufälliges Element:
random.choice()
- Stichprobe ohne Ersatz:
random.sample()
- Stichprobe mit Ersatz:
random.choices()
- Initialisieren Sie den Zufallszahlengenerator:
random.seed()
Wenn SIE Elemente aus Einer Liste nach Bedingungen auswählen möchten, lesen Sie den following Artikel.
Wenn Sie die gesamte Liste mischen oder eine Liste mit Zufallszahlen erhalten möchten, lesen Sie den following Artikel.
Wähle ein zufälliges Element:random.choice()
random.choice() gibt ein zufälliges Element aus einer Liste zurück.
import random
l = [0, 1, 2, 3, 4]
print(random.choice(l))
# 1
Tupel und Saiten werden ähnlich verarbeitet. Bei Einem String WIRD Ein Zeichen Zurückgegeben.
print(random.choice(('xxx', 'yyy', 'zzz')))
# yyy
print(random.choice('abcde'))
# b
Ein Fehler wird ausgelöst, wenn eine Liste, ein Tupel oder ein String leer ist.
# print(random.choice([]))
# IndexError: Cannot choose from an empty sequence
Stichprobe ohne Ersatz:random.sample()
random.sample() tastet zufällig mehrere Elemente aus einer Liste ohne Ersatz ab.
Übergeben Sie eine Liste an das erste Argument und die Anzahl der Elemente, die Sie erhalten möchten, an das zweite Argument. Eine Liste wird zurückgegeben.
import random
l = [0, 1, 2, 3, 4]
print(random.sample(l, 3))
# [1, 3, 2]
print(type(random.sample(l, 3)))
# <class 'list'>
Wenn das zweite Argument auf 1 gesetzt ist, wird eine Liste mit einem Element zurückgegeben. Wenn auf 0 gesetzt, wird eine leere Liste zurückgegeben. If es auf einen Wert gesetzt WIRD, der stirbt Anzahl der Elemente der Liste überschreitet, WIRD ein Fehler ausgelöst.
print(random.sample(l, 1))
# [0]
print(random.sample(l, 0))
# []
# print(random.sample(l, 10))
# ValueError: Sample larger than population or is negative
Auch wenn Sie ein Tupel oder einen String an das erste Argument übergeben, wird die Liste zurückgegeben.
print(random.sample(('xxx', 'yyy', 'zzz'), 2))
# ['xxx', 'yyy']
print(random.sample('abcde', 2))
# ['a', 'e']
Um eine Liste in ein Tupel oder einen String umzuwandeln, verwenden Sie tuple(), join().
print(tuple(random.sample(('xxx', 'yyy', 'zzz'), 2)))
# ('yyy', 'xxx')
print(''.join(random.sample('abcde', 2)))
# de
Beachten Sie, dass, wenn die ursprüngliche Liste oder das ursprüngliche Tupel doppelte Elemente enthält, möglicherweise derselbe Wert ausgewählt WIRD.
l_dup = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]
print(random.sample(l_dup, 3))
# [3, 1, 1]
Wenn Sie doppelte Werte vermeiden möchten, verwenden Sie set(), um Listen und Tupel in set umzuwandeln, extrahieren Sie nur eindeutige Elemente und verwenden Sie dann sample().
print(set(l_dup))
# {0, 1, 2, 3}
print(random.sample(set(l_dup), 3))
# [1, 3, 2]
Stichprobe mit Ersatz:random.choices()
random.choices() wählt mehrere zufällige Elemente aus einer Liste mit Ersetzung aus.
random.choices() wurde in Python 3.6 hinzugefügt und kann in ausgewählten Versionen nicht verwendet werden.
Geben Sie die Anzahl der Elemente an, die Sie mit dem Argument erhalten möchten. Da Elemente durch Ersetzen ausgewählt Werden, kann k größer sein als sterben Anzahl der Elemente in der ursprünglichen Liste.
Da k ein reines Schlüsselwortargument ist, muss wie k=3 angegeben werden.
import random
l = [0, 1, 2, 3, 4]
print(random.choices(l, k=3))
# [2, 1, 0]
print(random.choices(l, k=10))
# [3, 4, 1, 4, 4, 2, 0, 4, 2, 0]
k ist standardmäßig auf 1 gesetzt. Wenn weggelassen, wird eine Liste mit einem Element zurückgegeben.
print(random.choices(l))
# [1]
Sie können die Gewichtung (Wahrscheinlichkeit) für jedes Element im Argument weights angeben. Der Typ des in Gewichten angegebenen Listenelements kann entweder int oder float sein. Wenn der Wert 0 ist, wird das Element nicht ausgewählt.
print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1]))
# [0, 2, 3]
print(random.choices(l, k=3, weights=[1, 1, 0, 0, 0]))
# [0, 1, 1]
Kumulative Gewichte können im Argument cum_weights angegeben werden. cum_weights im following Beispielcode entspricht den ersten Gewichtungen im obigen Code.
print(random.choices(l, k=3, cum_weights=[1, 2, 3, 13, 14]))
# [3, 2, 3]
Standardmäßig sind sowohl weights als auch cum_weights auf None gesetzt, und each Element wird mit derselben Wahrscheinlichkeit ausgewählt.
Wenn die Länge (Anzahl der Elemente) von Gewichten oder cum_weights von der ursprünglichen Liste abweicht, WIRD ein Fehler ausgelöst.
# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1, 1, 1]))
# ValueError: The number of weights does not match the population_
Außerdem WIRD ein Fehler ausgelöst, WENN SIE gleichzeitig Gewichte und cum_weights angeben.
# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1], cum_weights=[1, 2, 3, 13, 14]))
# TypeError: Cannot specify both weights and cumulative weights
Im bisherigen Beispielcode wurde für das erste Argument eine Liste angegeben, aber dasselbe gilt für ein Tupel und eine Zeichenfolge.
Initialisieren Sie den Zufallszahlengenerator:random.seed()
Sie können einen Zufallszahlengenerator mit random.seed() initialisieren.
Nach der Initialisierung mit demselben Seed wird das Element auf dieselbe Weise ausgewählt.
random.seed(0)
print(random.choice(l))
# 3
random.seed(0)
print(random.choice(l))
# 3