¿Obtener un booleano aleatorio en Python?

Resuelto Xavier V. asked hace 13 años • 10 respuestas

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?

Xavier V. avatar Jul 26 '11 09:07 Xavier V.
Aceptado

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.choicedefinitivamente 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
John La Rooy avatar Jul 26 '2011 03:07 John La Rooy
import random
random.choice([True, False])

también funcionaría.

Adam Vandenberg avatar Jul 26 '2011 02:07 Adam Vandenberg