Answers:
亚当的答案相当快,但是我发现答案random.getrandbits(1)
要快得多。如果您真的想要布尔值而不是long值,那么
bool(random.getrandbits(1))
仍然是两倍的速度 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
在看到@Pavel的答案后添加了此内容
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
from random import getrandbits
避免属性查找来进一步加快速度。:-)
random.choice([True, False])
也可以。
找到了更快的方法:
$ 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
random() > 0.5
已经评估为布尔值,甚至更快!
random() >= 0.5
,否则您将对False有一点偏见。
random() < 0.5
更有意义的是预期变化0.5其他一些可能性的作品
如果要生成许多随机布尔值,可以使用numpy的random模块。从文档中
np.random.randint(2, size=10)
将在开放时间间隔[0,2)中返回10个随机一致整数。所述size
关键字指定的值的数目,以产生。
我很想知道numpy答案相对于其他答案的表现如何,因为这没有进行比较。要生成一个随机布尔,速度要慢得多,但是如果要生成多个布尔值,则速度会快得多:
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.0906 usec per loop
$ python -m timeit -s "import numpy as np" "np.random.randint(2, size=1)"
100000 loops, best of 3: 4.65 usec per loop
$ python -m timeit -s "from random import random" "test = [random() < 0.5 for i in range(1000000)]"
10 loops, best of 3: 118 msec per loop
$ python -m timeit -s "import numpy as np" "test = np.random.randint(2, size=1000000)"
100 loops, best of 3: 6.31 msec per loop
有关此问题的新观点将涉及使用Faker,您可以轻松地使用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)
fake.boolean()
语法是干净的,很容易让别人神交。
not not random.getrandbits(1))
它会比bool
;)还快