Antworten:
Adams Antwort ist ziemlich schnell, aber ich fand, dass random.getrandbits(1)
das viel schneller ist. Wenn Sie wirklich einen Booleschen statt einen langen 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 höchste Geschwindigkeit keine Priorität hat, random.choice
liest sich das definitiv besser
$ python -m timeit -s "import random" "random.choice([True, False])"
1000000 loops, best of 3: 0.904 usec per loop
$ python -m timeit -s "import random" "random.choice((True, False))"
1000000 loops, best of 3: 0.846 usec per loop
$ python -m timeit -s "import random" "random.getrandbits(1)"
1000000 loops, best of 3: 0.286 usec per loop
$ python -m timeit -s "import random" "bool(random.getrandbits(1))"
1000000 loops, best of 3: 0.441 usec per loop
$ python -m timeit -s "import random" "not random.getrandbits(1)"
1000000 loops, best of 3: 0.308 usec per loop
$ python -m timeit -s "from random import getrandbits" "not getrandbits(1)"
1000000 loops, best of 3: 0.262 usec per loop # not takes about 20us of this
Fügte dieses hinzu, nachdem ich @ Pavel's Antwort gesehen hatte
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
from random import getrandbits
die Attributsuche vermeiden. :-)
random.choice([True, False])
würde auch funktionieren.
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
random() > 0.5
wertet sich schon zu einem Bool aus, der noch schneller ist!
random() >= 0.5
Andernfalls sind Sie ein bisschen voreingenommen in Richtung Falsch.
random() < 0.5
ist sinnvoller, da das Ändern von 0,5 auf eine andere Wahrscheinlichkeit wie erwartet funktioniert
Wenn Sie eine Anzahl von zufälligen Booleschen Werten generieren möchten, können Sie das Zufallsmodul von numpy verwenden. Aus der Dokumentation
np.random.randint(2, size=10)
gibt 10 zufällige einheitliche ganze Zahlen im offenen Intervall zurück [0,2]. Das size
Schlüsselwort gibt die Anzahl der zu generierenden Werte an.
Ich war neugierig, wie sich die Geschwindigkeit der numpy Antwort gegenüber den anderen Antworten verhält, da dies in den Vergleichen nicht berücksichtigt wurde. Um einen zufälligen Bool zu generieren, ist dies viel langsamer, aber wenn Sie viele generieren möchten, wird dies viel schneller:
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.0906 usec per loop
$ python -m timeit -s "import numpy as np" "np.random.randint(2, size=1)"
100000 loops, best of 3: 4.65 usec per loop
$ python -m timeit -s "from random import random" "test = [random() < 0.5 for i in range(1000000)]"
10 loops, best of 3: 118 msec per loop
$ python -m timeit -s "import numpy as np" "test = np.random.randint(2, size=1000000)"
100 loops, best of 3: 6.31 msec per loop
Sie können die Faker-Bibliothek verwenden , die hauptsächlich zum Testen verwendet wird, aber eine Vielzahl von gefälschten Daten bereitstellen kann.
Installieren Sie: https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
Eine neue Sichtweise auf diese Frage würde die Verwendung von Faker beinhalten, mit dem Sie einfach installieren können pip
.
from faker import Factory
#----------------------------------------------------------------------
def create_values(fake):
""""""
print fake.boolean(chance_of_getting_true=50) # True
print fake.random_int(min=0, max=1) # 1
if __name__ == "__main__":
fake = Factory.create()
create_values(fake)
fake.boolean()
Syntax ist sauber und für andere leicht zu verstehen.
not not random.getrandbits(1))
ist das schneller alsbool
;)