Je cherche la meilleure façon (rapide et élégante) d'obtenir un booléen aléatoire en python (lancer une pièce).
Pour le moment, j'utilise random.randint(0, 1)
ou random.getrandbits(1)
.
Y a-t-il de meilleurs choix que je ne connais pas?
La réponse d'Adam est assez rapide, mais j'ai trouvé que random.getrandbits(1)
c'était beaucoup plus rapide. Si vous voulez vraiment un booléen au lieu d'un long alors
bool(random.getrandbits(1))
est toujours environ deux fois plus rapide que random.choice([True, False])
Les deux solutions doivent import random
Si la vitesse maximale n'est pas prioritaire, alors la random.choice
lecture est meilleure
$ 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
Ajouté celui-ci après avoir vu la réponse 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))
bool
from random import getrandbits
évitant la recherche d'attributs. :-)fonctionnerait également.
la source
Trouvé une méthode plus rapide:
la source
random() > 0.5
évalue déjà à un bool qui est encore plus rapide!random() >= 0.5
, sinon vous serez un peu biaisé vers Faux.random() < 0.5
est plus logique car le changement de 0,5 à une autre probabilité fonctionne comme prévuJ'aime
la source
Si vous souhaitez générer un certain nombre de booléens aléatoires, vous pouvez utiliser le module aléatoire de numpy. De la documentation
renverra 10 entiers uniformes aléatoires dans l'intervalle ouvert [0,2). Le
size
mot-clé spécifie le nombre de valeurs à générer.la source
J'étais curieux de savoir comment la vitesse de la réponse numpy a fonctionné par rapport aux autres réponses, car cela n'a pas été pris en compte dans les comparaisons. Pour générer un bool aléatoire, c'est beaucoup plus lent, mais si vous vouliez en générer plusieurs, cela devient beaucoup plus rapide:
la source
Vous pouvez utiliser la bibliothèque Faker , elle est principalement utilisée pour les tests, mais est capable de fournir une variété de fausses données.
Installez: https://pypi.org/project/Faker/
la source
Une nouvelle approche de cette question impliquerait l'utilisation de Faker avec lequel vous pouvez facilement installer
pip
.la source
fake.boolean()
syntaxe est propre et facile à comprendre pour les autres.