# Get a random boolean in python?

## Get a random boolean in python?

Adams answer is quite fast, but I found that `random.getrandbits(1)` to be quite a lot faster. If you really want a boolean instead of a long then

``````bool(random.getrandbits(1))
``````

is still about twice as fast as `random.choice([True, False])`

Both solutions need to `import random`

If utmost speed isnt to priority then `random.choice` definitely reads better.

Note that `random.choice()` is slower than just `choice()` (after `from random import choice`) due to the attribute lookup.

``````\$ 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])
``````

would also work.

#### Get a random boolean in python?

Found a faster method:

``````\$ 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
``````