我正在寻找最好的方法(快速和优雅)在python中获得一个随机布尔值(抛硬币)。
目前我使用的是随机。Randint(0,1)或random.getrandbits(1)。
还有我不知道的更好的选择吗?
我正在寻找最好的方法(快速和优雅)在python中获得一个随机布尔值(抛硬币)。
目前我使用的是随机。Randint(0,1)或random.getrandbits(1)。
还有我不知道的更好的选择吗?
当前回答
以下方法也可用于此目的:
import random
random.choice([0, 1])
or
import random
random.choice(range(2))
其他回答
我喜欢
np.random.rand() > .5
import random
random.choice([True, False])
也会起作用。
你可以使用Faker库,它主要用于测试,但能够提供各种虚假数据。
安装:https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
找到了一个更快的方法:
$ 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答案的速度与其他答案相比表现如何,因为这被排除在比较之外。生成一个随机bool值会慢得多,但如果你想生成多个则会快得多:
$ 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