Yanıtlar:
Adam'ın cevabı oldukça hızlı, ama bunu random.getrandbits(1)
çok daha hızlı buldum . Gerçekten uzun bir yerine bir boolean istiyorsanız
bool(random.getrandbits(1))
hala yaklaşık iki kat daha hızlı random.choice([True, False])
Her iki çözüm de import random
En yüksek hız öncelikli değilse, random.choice
kesinlikle daha iyi okunur
$ 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'in cevabını gördükten sonra bunu ekledim
$ 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
Özellik aramasını önlemek için bunu daha da hızlandırabilirsiniz . :-)
random.choice([True, False])
de işe yarar.
Daha hızlı bir yöntem bulundu:
$ 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
zaten daha hızlı bir boole değerlendiriyor!
random() >= 0.5
Aksi takdirde, False'a karşı biraz önyargılı olacaksınız.
random() < 0.5
beklendiği gibi diğer olasılıklara 0,5 olarak değiştirme daha mantıklı
Bir dizi rastgele boole üretmek istiyorsanız numpy'nin rastgele modülünü kullanabilirsiniz. Gönderen dokümantasyon
np.random.randint(2, size=10)
açık aralıkta 10 rasgele düzgün tamsayı döndürür [0,2). size
Anahtar kelime belirtir değerlerin sayısı üretmek için.
Karşılaştırmaların dışında bırakıldığından, numpy cevabının diğer cevaplara karşı nasıl bir performans gösterdiğini merak ettim. Bir rastgele bool üretmek için bu çok daha yavaştır, ancak çok sayıda üretmek istiyorsanız, bu çok daha hızlı hale gelir:
$ 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 kütüphanesini kullanabilirsiniz, çoğunlukla test için kullanılır, ancak çeşitli sahte veriler sağlayabilir.
Yükleme: https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
Bu soruya yeni bir bakış , kolayca kurabileceğiniz Faker kullanımını içerecektir 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()
Sözdizimi diğerleri grok için temiz ve kolaydır.
not not random.getrandbits(1))
bool