372 Stimmen

Einen zufälligen booleschen Wert in Python erhalten?

Ich bin auf der Suche nach dem besten Weg (schnell und elegant), um eine zufällige boolesche in Python zu erhalten (eine Münze werfen).

Im Moment verwende ich random.randint(0, 1) o random.getrandbits(1) .

Gibt es bessere Möglichkeiten, die mir nicht bekannt sind?

501voto

John La Rooy Punkte 278961

Die Antwort von Adam ist ziemlich schnell, aber ich fand, dass random.getrandbits(1) um einiges schneller sein. Wenn Sie wirklich einen Booleschen Wert statt eines Long-Wertes wollen, dann

bool(random.getrandbits(1))

ist immer noch etwa doppelt so schnell wie random.choice([True, False])

Beide Lösungen müssen import random

Wenn die höchste Geschwindigkeit keine Priorität hat, dann random.choice liest sich definitiv besser.

Beachten Sie, dass random.choice() langsamer ist als nur choice() (nach from random import choice ) aufgrund der Attributssuche.

$ python3 --version
Python 3.9.7
$ python3 -m timeit -s "from random import choice" "choice([True, False])"
1000000 loops, best of 5: 376 nsec per loop
$ python3 -m timeit -s "from random import choice" "choice((True, False))"
1000000 loops, best of 5: 352 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "getrandbits(1)"
10000000 loops, best of 5: 33.7 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "bool(getrandbits(1))"
5000000 loops, best of 5: 89.5 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "not getrandbits(1)"
5000000 loops, best of 5: 46.3 nsec per loop
$ python3 -m timeit -s "from random import random" "random() < 0.5"
5000000 loops, best of 5: 46.4 nsec per loop

276voto

Adam Vandenberg Punkte 18803
import random
random.choice([True, False])

würde auch funktionieren.

55voto

Pavel Radchenko Punkte 669

Ich habe eine schnellere Methode gefunden:

$ python -m timeit -s "from random import getrandbits" "not getrandbits(1)"
10000000 loops, best of 3: 0.222 usec per loop
$ python -m timeit -s "from random import random" "True if random() > 0.5 else False"
10000000 loops, best of 3: 0.0786 usec per loop
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.0579 usec per loop

13voto

Chris Punkte 41714

Wenn Sie eine Anzahl von zufälligen Booleschen Werten erzeugen wollen, können Sie das Random-Modul von Numpy verwenden. Aus dem Dokumentation

np.random.randint(2, size=10)

gibt 10 zufällige ganze Zahlen aus dem offenen Intervall [0,2) zurück. Die size Schlüsselwort gibt die Anzahl der zu erzeugenden Werte an.

13voto

Maarten Punkte 4189

Ich mag

 np.random.rand() > .5

CodeJaeger.com

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.

Powered by:

X