Jawaban:
Jawaban Adam cukup cepat, tetapi ternyata random.getrandbits(1)
lebih cepat. Jika Anda benar-benar menginginkan boolean, bukan lama
bool(random.getrandbits(1))
masih sekitar dua kali lebih cepat random.choice([True, False])
Kedua solusi perlu import random
Jika kecepatan maksimal bukan prioritas maka random.choice
pasti membaca lebih baik
$ 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
Menambahkan ini setelah melihat jawaban @ 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
untuk menghindari pencarian atribut. :-)
random.choice([True, False])
juga akan bekerja.
Menemukan metode yang lebih cepat:
$ 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
sudah dievaluasi menjadi bool yang bahkan lebih cepat!
random() >= 0.5
, jika tidak, Anda akan sedikit bias terhadap False.
random() < 0.5
lebih masuk akal karena mengubah 0,5 ke beberapa probabilitas lain berfungsi seperti yang diharapkan
Jika Anda ingin menghasilkan sejumlah boolean acak, Anda bisa menggunakan modul acak numpy. Dari dokumentasi
np.random.randint(2, size=10)
akan mengembalikan 10 bilangan bulat seragam acak dalam interval terbuka [0,2). Kata size
kunci menentukan jumlah nilai yang akan dihasilkan.
Saya ingin tahu bagaimana kecepatan jawaban numpy dilakukan terhadap jawaban lain karena ini tidak disertakan dalam perbandingan. Untuk menghasilkan satu bool acak ini jauh lebih lambat tetapi jika Anda ingin menghasilkan banyak bool maka ini menjadi jauh lebih cepat:
$ 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
Anda bisa menggunakan pustaka Faker , ini terutama digunakan untuk pengujian, tetapi mampu memberikan berbagai data palsu.
Instal: https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
Pandangan baru tentang pertanyaan ini akan melibatkan penggunaan Faker yang dapat Anda instal dengan mudah 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()
sintaks bersih dan mudah bagi orang lain untuk grok.
not not random.getrandbits(1))
lebih cepat daribool
;)