La réponse d'Adam est assez rapide, mais j'ai trouvé que random.getrandbits(1)
pour être 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 une priorité, alors random.choice
se lit définitivement mieux.
Notez que random.choice()
est plus lent que le simple choice()
(après from random import choice
) en raison de la recherche d'attributs.
$ python3 --version
Python 3.9.7
$ python3 -m timeit -s "from random import choice" "choice([True, False])"
1000000 loops, best of 5: 376 nsec per loop
$ python3 -m timeit -s "from random import choice" "choice((True, False))"
1000000 loops, best of 5: 352 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "getrandbits(1)"
10000000 loops, best of 5: 33.7 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "bool(getrandbits(1))"
5000000 loops, best of 5: 89.5 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "not getrandbits(1)"
5000000 loops, best of 5: 46.3 nsec per loop
$ python3 -m timeit -s "from random import random" "random() < 0.5"
5000000 loops, best of 5: 46.4 nsec per loop
5 votes
Il s'agit d'une question pertinente et valide sur les performances des différentes options permettant d'obtenir un booléen aléatoire, mais j'ai l'impression que le fait que la meilleure solution gagne moins d'une seconde par rapport à la moins bonne solution qui gagne plus d'une seconde est perdu dans le bruit de tous les benchmarks. million itérations. Si vous êtes venu ici pour trouver un moyen d'accélérer une application, vous devriez probablement commencer par examiner d'autres options.