¿Obtener un booleano aleatorio en Python?
Estoy buscando la mejor manera (rápida y elegante) de obtener un valor booleano aleatorio en Python (lanzar una moneda).
Por el momento estoy usando random.randint(0, 1)
o random.getrandbits(1)
.
¿Hay mejores opciones que no conozco?
La respuesta de Adam es bastante rápida, pero descubrí que random.getrandbits(1)
es mucho más rápida. Si realmente quieres un valor booleano en lugar de largo, entonces
import random
bool(random.getrandbits(1))
sigue siendo aproximadamente el doble de rápido querandom.choice([True, False])
Ambas soluciones necesitanimport random
Si la máxima velocidad no es una prioridad, random.choice
definitivamente se lee mejor.
Tenga en cuenta que random.choice()
es más lento que choice()
(después from random import choice
) debido a la búsqueda de atributos.
$ 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
import random
random.choice([True, False])
también funcionaría.