Я ищу лучший способ (быстрый и элегантный), чтобы получить случайный логический в Python (подбросить монету).
На данный момент я использую random.randint(0, 1)
или random.getrandbits(1)
.
Есть ли лучший выбор, о котором я не знаю?
Ответ Адама довольно быстрый, но я обнаружил, что random.getrandbits(1)
он намного быстрее. Если вы действительно хотите логическое вместо длинного, то
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
Добавил этот, увидев ответ @ Павла
$ 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
избегая поиска атрибутов. :-)также будет работать.
источник
Нашел более быстрый метод:
источник
random() > 0.5
уже оценивается как бул, который еще быстрее!random() >= 0.5
в противном случае вы будете слегка склонны к Ложному.random() < 0.5
имеет больше смысла, так как изменение 0.5 на некоторую другую вероятность работает, как и ожидалосьмне нравиться
источник
Если вы хотите сгенерировать несколько случайных логических значений, вы можете использовать случайный модуль numpy. Из документации
вернет 10 случайных одинаковых целых чисел в открытом интервале [0,2). В
size
ключевом слове определяет число значений для генерации.источник
Мне было любопытно, как скорость откровенного ответа шла против других ответов, так как это было исключено из сравнений. Чтобы сгенерировать один случайный бул, это намного медленнее, но если вы хотите сгенерировать много, то это станет намного быстрее
источник
Вы можете использовать библиотеку Faker , она в основном используется для тестирования, но способна предоставлять множество поддельных данных.
Установите: https://pypi.org/project/Faker/
источник
Новый подход к этому вопросу будет связан с использованием Faker, который вы можете легко установить
pip
.источник
fake.boolean()
Синтаксис является чистым и легким для других обращали внимание.