답변:
Adam의 답변은 매우 빠르지 만 random.getrandbits(1)
상당히 빠릅니다. 정말로 long 대신 부울을 원한다면
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
from random import getrandbits
속성 조회를 피 함으로써 속도를 더욱 높일 수 있습니다. :-)
더 빠른 방법을 찾았습니다.
$ 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
이미 더 빠른 부울로 평가됩니다!
random() >= 0.5
그렇지 않으면 False를 향한 작은 편향이 될 것입니다.
random() < 0.5
예상대로 다른 확률 작품에 0.5을 변경하는 등 더 의미
다수의 임의의 부울을 생성하려면 numpy의 임의 모듈을 사용할 수 있습니다. 로부터 문서
np.random.randint(2, size=10)
열린 간격 [0,2)에서 10 개의 임의의 균일 한 정수를 반환합니다. size
키워드 지정 값의 수를 생성합니다.
나는 이것이 비교에서 제외 된 이후 다른 답변에 비해 numpy 답변의 속도가 어떻게 수행되는지 궁금했습니다. 하나의 임의의 부울을 생성하려면 속도가 훨씬 느리지 만 많은 것을 생성하려면 훨씬 빠릅니다.
$ 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 라이브러리를 사용할 수 있으며 주로 테스트에 사용되지만 다양한 가짜 데이터를 제공 할 수 있습니다.
설치 : https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
이 질문에 대한 새로운 내용은 Faker 를 사용 하여 쉽게 설치할 수 있습니다 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()
구문은 다른 사람이 grok 수하기 위해 깨끗하고 간단합니다.
not not random.getrandbits(1))
것보다 빠르 다면bool
;)