Estou procurando a melhor maneira (rápida e elegante) de obter um booleano aleatório em python (jogar uma moeda).
No momento estou usando random.randint(0, 1)
ou random.getrandbits(1)
.
Existem melhores opções que eu não conheço?
A resposta de Adam é bastante rápida, mas eu achei random.getrandbits(1)
muito mais rápido. Se você realmente quer um booleano em vez de um longo,
bool(random.getrandbits(1))
ainda é duas vezes mais rápido que random.choice([True, False])
Ambas as soluções precisam import random
Se a velocidade máxima não é prioritária, então random.choice
definitivamente é melhor ler
$ 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
Adicionado este após ver a resposta de @ Pavel
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
not not random.getrandbits(1))
é mais rápido do quebool
;)from random import getrandbits
para evitar a pesquisa de atributo. :-)também funcionaria.
fonte
Encontrou um método mais rápido:
fonte
random() > 0.5
já avalia para um bool que é ainda mais rápido!random() >= 0.5
, caso contrário, você será um pouco inclinado para False.random() < 0.5
faz mais sentido como mudar 0,5 a algumas outras obras de probabilidade como esperadoEu gosto
fonte
Se você deseja gerar um número aleatório de booleanos, pode usar o módulo aleatório do numpy. A partir da documentação
retornará 10 inteiros uniformes aleatórios no intervalo aberto [0,2). A
size
palavra-chave especifica o número de valores a serem gerados.fonte
Fiquei curioso para saber como a velocidade da resposta entorpecida se compara às outras respostas, uma vez que isso foi deixado de fora das comparações. Para gerar um bool aleatório, isso é muito mais lento, mas se você quiser gerar muitos, isso se torna muito mais rápido:
fonte
Você pode usar a biblioteca Faker , que é usada principalmente para testes, mas é capaz de fornecer uma variedade de dados falsos.
Instale: https://pypi.org/project/Faker/
fonte
Uma nova visão sobre essa questão envolveria o uso do Faker, com o qual você pode instalar facilmente
pip
.fonte
fake.boolean()
sintaxe é limpa e fácil para os outros entenderem.