在 python 中获取随机布尔值?

新手上路,请多包涵

我正在寻找在 python 中获取随机布尔值(抛硬币)的最佳方法(快速而优雅)。

目前我正在使用 random.randint(0, 1)random.getrandbits(1)

有没有我不知道的更好的选择?

原文由 Xavier V. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

Adam 的回答相当快,但我发现 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

原文由 John La Rooy 发布,翻译遵循 CC BY-SA 4.0 许可协议

import random
random.choice([True, False])

也会工作。

原文由 Adam Vandenberg 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题