Angenommen, ich habe die folgende Liste:
foo = ['a', 'b', 'c', 'd', 'e']
Was ist die einfachste Methode, um einen zufälligen Eintrag aus dieser Liste auszuwählen?
Angenommen, ich habe die folgende Liste:
foo = ['a', 'b', 'c', 'd', 'e']
Was ist die einfachste Methode, um einen zufälligen Eintrag aus dieser Liste auszuwählen?
NumPy Lösung: numpy.random.choice
Für diese Frage gilt dasselbe wie für die akzeptierte Antwort ( import random; random.choice()
), aber ich habe es hinzugefügt, weil der Programmierer vielleicht schon NumPy importiert hat (wie ich)
Und es gibt auch einige Unterschiede zwischen den beiden Methoden die Ihren konkreten Anwendungsfall betreffen können.
import numpy as np
np.random.choice(foo) # randomly selects a single item
Für die Reproduzierbarkeit, können Sie tun:
np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'
Für Proben von ein oder mehrere Gegenstände , zurückgegeben als array
die size
Argument:
np.random.choice(foo, 5) # sample with replacement (default)
np.random.choice(foo, 5, False) # sample without replacement
Wie wählt man zufällig ein Element aus einer Liste aus?
Angenommen, ich habe die folgende Liste:
foo = ['a', 'b', 'c', 'd', 'e']
Was ist die einfachste Methode, um einen zufälligen Eintrag aus dieser Liste auszuwählen?
Wenn Sie wollen schließen a wirklich zufällig dann schlage ich vor secrets.choice
aus der Standardbibliothek (Neu in Python 3.6.):
>>> from secrets import choice # Python 3 only
>>> choice(list('abcde'))
'c'
Die obige Vorgehensweise entspricht meiner früheren Empfehlung, eine SystemRandom
Objekt aus dem random
Modul mit dem choice
Methode - früher in Python 2 verfügbar:
>>> import random # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
Und jetzt:
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
Wenn Sie eine deterministische Pseudozufallsauswahl wünschen, verwenden Sie die choice
Funktion (die eigentlich eine gebundene Methode für eine Random
Objekt):
>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>
Es scheint willkürlich zu sein, ist es aber nicht, was wir sehen können, wenn wir es wiederholt neu säen:
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
Hier geht es nicht darum, ob random.choice wirklich zufällig ist oder nicht. Wenn man den Seed festlegt, erhält man reproduzierbare Ergebnisse - und genau dafür ist Seed gedacht. Sie können auch einen Seed an SystemRandom übergeben.
sr = random.SystemRandom(42)
Nun, ja, Sie können ihm ein "seed"-Argument übergeben, aber Sie werden sehen, dass die SystemRandom
Objekt ignoriert es einfach :
def seed(self, *args, **kwds):
"Stub method. Not used for a system random number generator."
return None
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.