Szukam najlepszego sposobu (szybkiego i eleganckiego), aby uzyskać losową wartość logiczną w pythonie (rzuć monetą).
W tej chwili używam random.randint(0, 1)
lub random.getrandbits(1)
.
Czy są lepsze opcje, których nie jestem świadomy?
Odpowiedź Adama jest dość szybka, ale stwierdziłem, że random.getrandbits(1)
jest znacznie szybsza. Jeśli naprawdę chcesz długo boolean
bool(random.getrandbits(1))
jest nadal około dwa razy szybszy niż random.choice([True, False])
Oba rozwiązania muszą import random
Jeśli najwyższa prędkość nie jest priorytetem, to random.choice
zdecydowanie lepiej
$ 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
Dodałem ten po obejrzeniu odpowiedzi @ Pavela
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
not not random.getrandbits(1))
jest szybsza niżbool
;)from random import getrandbits
unikając wyszukiwania atrybutów. :-)też by działał.
źródło
Znaleziono szybszą metodę:
źródło
random() > 0.5
już ocenia na bool, który jest jeszcze szybszy!random() >= 0.5
, w przeciwnym razie będziesz trochę stronniczy w stosunku do False.random() < 0.5
ma sens, gdy zmiana 0,5 na inne prawdopodobieństwo działa zgodnie z oczekiwaniamipodoba mi się
źródło
Jeśli chcesz wygenerować liczbę losowych boolanów, możesz użyć losowego modułu numpy. Z dokumentacji
zwróci 10 losowych jednolitych liczb całkowitych w przedziale otwartym [0,2). Słowo
size
kluczowe określa liczbę wartości do wygenerowania.źródło
Byłem ciekawy, jak szybkość numpy odpowiedzi wypadła w porównaniu z innymi odpowiedziami, ponieważ nie uwzględniono tego w porównaniach. Aby wygenerować jeden losowy bool, jest to znacznie wolniejsze, ale jeśli chcesz wygenerować wiele, staje się to znacznie szybsze:
źródło
Możesz użyć biblioteki Fakera , jest ona głównie używana do testowania, ale jest w stanie dostarczyć różnorodne fałszywe dane.
Zainstaluj: https://pypi.org/project/Faker/
źródło
Nowe podejście do tego pytania wymagałoby użycia Fakera, z którym można łatwo zainstalować
pip
.źródło
fake.boolean()
Składnia jest czyste i proste, aby inni mogli grok.