Câu trả lời:
Câu trả lời của Adam khá nhanh, nhưng tôi thấy rằng nó random.getrandbits(1)
nhanh hơn khá nhiều. Nếu bạn thực sự muốn một boolean thay vì dài
bool(random.getrandbits(1))
vẫn nhanh gấp đôi random.choice([True, False])
Cả hai giải pháp cần phải import random
Nếu tốc độ tối đa không được ưu tiên thì random.choice
chắc chắn đọc tốt hơn
$ 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
Đã thêm cái này sau khi thấy câu trả lời của @ 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
để tránh tra cứu thuộc tính. :-)
random.choice([True, False])
cũng sẽ làm việc
Tìm thấy một phương pháp nhanh hơn:
$ 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
đã đánh giá một bool mà thậm chí còn nhanh hơn!
random() >= 0.5
, nếu không, bạn sẽ có một chút thiên vị đối với Sai.
random() < 0.5
có ý nghĩa hơn khi thay đổi 0,5 thành một số xác suất khác hoạt động như mong đợi
Nếu bạn muốn tạo một số booleans ngẫu nhiên, bạn có thể sử dụng mô-đun ngẫu nhiên của numpy. Từ tài liệu
np.random.randint(2, size=10)
sẽ trả về 10 số nguyên thống nhất ngẫu nhiên trong khoảng thời gian mở [0,2). Các size
quy định cụ thể từ khóa số của các giá trị để tạo ra.
Tôi tò mò về tốc độ của câu trả lời khó hiểu đã thực hiện như thế nào so với các câu trả lời khác vì điều này bị bỏ qua so sánh. Để tạo một bool ngẫu nhiên, điều này chậm hơn nhiều nhưng nếu bạn muốn tạo nhiều thì điều này trở nên nhanh hơn nhiều:
$ 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
Bạn có thể sử dụng thư viện Faker , nó chủ yếu được sử dụng để thử nghiệm, nhưng có khả năng cung cấp nhiều loại dữ liệu giả mạo.
Cài đặt: https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
Một câu hỏi mới về câu hỏi này sẽ liên quan đến việc sử dụng Faker mà bạn có thể cài đặt dễ dàng 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()
cú pháp là sạch sẽ và dễ dàng cho người khác để grok.
not not random.getrandbits(1))
thì nhanh hơnbool
;)