在python中获取随机布尔值?

Xav*_* V. 210 python random

我正在寻找最好的方法(快速和优雅)来获得python中的随机布尔值(翻转硬币).

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

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

Joh*_*ooy 293

亚当的回答非常快,但我发现random.getrandbits(1)速度要快得多.如果你真的想要一个布尔而不是一个长

bool(random.getrandbits(1))
Run Code Online (Sandbox Code Playgroud)

仍然是快的两倍 random.choice([True, False])

两种解决方案都需要 import random

如果最高速度不是优先考虑那么random.choice肯定会更好

$ python -m timeit -s "import random" "random.choice([True, False])"
1000000 loops, best of 3: 0.904 usec per loop
$ python -m timeit -s "import random" "random.choice((True, False))" 
1000000 loops, best of 3: 0.846 usec per loop
$ python -m timeit -s "import random" "random.getrandbits(1)"
1000000 loops, best of 3: 0.286 usec per loop
$ python -m timeit -s "import random" "bool(random.getrandbits(1))"
1000000 loops, best of 3: 0.441 usec per loop
$ python -m timeit -s "import random" "not random.getrandbits(1)"
1000000 loops, best of 3: 0.308 usec per loop
$ python -m timeit -s "from random import getrandbits" "not getrandbits(1)"
1000000 loops, best of 3: 0.262 usec per loop  # not takes about 20us of this
Run Code Online (Sandbox Code Playgroud)

在看到@ Pavel的回答后添加了这个

$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
Run Code Online (Sandbox Code Playgroud)

  • @Michal,单曲`not`在这种情况下同样适用 (31认同)
  • 如果我们都是关于性能的,那么`not not random.getrandbits(1))`比`bool`更快;) (11认同)
  • 您可能根本不需要转换为布尔值,因为0/1具有正确的真值. (9认同)
  • 你可以通过`from random import getrandbits`来进一步加速它,以避免属性查找.:-) (5认同)
  • 实际上,缺少属性查找似乎是“random() &lt; 0.5”最快的原因。当使用“from random import getrandbits”时,“getrandbits”比“random() &lt; 0.5”更快。 (2认同)

Ada*_*erg 163

random.choice([True, False])
Run Code Online (Sandbox Code Playgroud)

也会有用.

  • 只是‘随机’。[它是标准库的一部分](https://docs.python.org/3/library/random.html#random.choice) (3认同)

Pav*_*nko 35

找到一个更快的方法:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • `random()> = 0.5`,否则你会偏向False. (24认同)
  • `random()<0.5`更有意义,因为将0.5改为其他概率可以按预期工作 (12认同)
  • `random()> 0.5`已经评估为bool,甚至更快! (3认同)

Maa*_*ten 8

我喜欢

 np.random.rand() > .5
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 6

如果你想生成一些随机布尔值,你可以使用numpy的随机模块.从文档中

np.random.randint(2, size=10)
Run Code Online (Sandbox Code Playgroud)

将在开放区间[0,2]中返回10个随机均匀整数.所述size关键字指定值以生成的数目.


小智 6

你可以使用Faker库,它主要用于测试,但能够提供各种假数据。

安装: https: //pypi.org/project/Faker/

>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
Run Code Online (Sandbox Code Playgroud)