我正在尋找最好的方法(快速和優雅)來獲得一個隨機布爾在python(翻轉硬幣)。在python中獲取一個隨機布爾值?
目前我正在使用random.randint(0, 1)
或random.getrandbits(1)
。
有沒有更好的選擇,我不知道?
我正在尋找最好的方法(快速和優雅)來獲得一個隨機布爾在python(翻轉硬幣)。在python中獲取一個隨機布爾值?
目前我正在使用random.randint(0, 1)
或random.getrandbits(1)
。
有沒有更好的選擇,我不知道?
亞當的答案相當快,但我發現random.getrandbits(1)
要快得多。如果你真的想要一個布爾值,而不是一個長期然後
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
random.choice([True, False])
也可以工作。
可能會有點慢,但很多更具可讀性... –
如果你想生成一些隨機布爾值,你可以使用numpy的隨機模塊。從documentation
np.random.randint(2, size=10)
將在開區間[0,2)返回10個隨機均勻整數。 size
關鍵字指定要生成的值的數量。
我喜歡
np.random.rand() > .5
找到一個更快的方法:
$ 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
'隨機()> 0.5'已經評估爲更快的布爾! –
你是對的!它更快:)我已經更新了答案。 –
'random()> = 0.5',否則你會偏向False。 –
的新嘗試對這個問題會涉及使用法克爾,你可以用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)
您至少應該解釋爲什麼您認爲這是一個更好的解決方案,因爲它涉及下載不同的包並且更混亂。 – Bzazz
我不同意downvotes。如果你正在創建隨機數據,你很可能處於Faker是一個非常有用的工具的情況。 'fake.boolean()'語法對其他人來說乾淨而且容易。 –
如果我們所有關於性能,'不是沒有random.getrandbits(1))'是比'bool'更快;) –
@Michal ,在這種情況下單個'not'就可以工作 –
因爲0/1具有正確的真值,所以根本不需要轉換爲布爾值。 –