我正在寻找在python中获得随机布尔值(抛硬币)的最佳方法(快速而优雅).
目前我用的是random.randint(0, 1)
或random.getrandbits(1)
.
有没有我不知道的更好的 Select ?
我正在寻找在python中获得随机布尔值(抛硬币)的最佳方法(快速而优雅).
目前我用的是random.randint(0, 1)
或random.getrandbits(1)
.
有没有我不知道的更好的 Select ?
亚当的答案很快,但我发现random.getrandbits(1)
比random.getrandbits(1)
快得多.如果你真的想要布尔型而不是长型
bool(random.getrandbits(1))
仍然是random.choice([True, False])
的两倍
这两种解决方案都需要import random
如果最高速度不是优先考虑的,那么random.choice
肯定读起来更好.
注意,由于属性查找,random.choice()
比choice()
(from random import choice
之后)慢.
$ 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