获取一个在Python中的随机布尔值?

我正在寻找最好的方法(快速和优雅),以获得一个随机布尔在python(翻转硬币)。

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

有没有更好的select,我不知道?

亚当的答案相当快,但我发现random.getrandbits(1)要快得多。 如果你真的想要一个布尔值而不是很长的话

 bool(random.getrandbits(1)) 

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

如果最高速度不是优先,那么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 

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

 $ python -m timeit -s "from random import random" "random() < 0.5" 10000000 loops, best of 3: 0.115 usec per loop 
 random.choice([True, False]) 

也会工作。

find一个更快的方法:

 $ 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 

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

 np.random.randint(2, size=10) 

将在开放区间[0,2)返回10个随机统一整数。 size关键字指定要生成的值的数量。

我喜欢

  np.random.rand() > .5 

对这个问题的一个新的考虑将涉及使用Faker ,你可以用pip轻松安装。

 from faker import Factory #---------------------------------------------------------------------- def create_values(fake): """""" print fake.boolean(chance_of_getting_true=50) # True print fake.random_int(min=0, max=1) # 1 if __name__ == "__main__": fake = Factory.create() create_values(fake)