我正在寻找最好的方法(快速和优雅)来获得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)
Ada*_*erg 163
random.choice([True, False])
Run Code Online (Sandbox Code Playgroud)
也会有用.
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)
如果你想生成一些随机布尔值,你可以使用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)
| 归档时间: |
|
| 查看次数: |
129749 次 |
| 最近记录: |