Разница между bool(prod(...)) и all(...)Python

Программы на Python
Ответить
Anonymous
 Разница между bool(prod(...)) и all(...)

Сообщение Anonymous »

Поскольку я не являюсь «родным» пользователем Python, я использовал bool(prod( ... ), чтобы проверить, все ли элементы в списке логических значений являются истинными. Я использовал свойство , это логическое значение сопоставляется с 0 и 1, и поскольку любой 0 в продукте делает весь продукт равным 0, это удовлетворяет моим потребностям.
Теперь наткнулся на все(... ) Как видно из этой программы, они возвращают эквивалентный результат:
.from random import randint
from math import prod

# create a array where each element has a 10% chance of being False, else True
l_bool=[randint(0,9)>0 for _ in range(10)]

# check if all elements are True
bool(prod(l_bool)),all(l_bool)

Я понимаю, что prod() более универсален, так как ему необходимо хранить промежуточный результат произведения, и он «предназначен специально для использования с числовыми значениями».< /p>
Из документации all() видно, что он выполняет итерацию ввода до тех пор, пока не поймает False, и, вероятно, оптимизирован именно для этой задачи.
>
Однако я предполагаю, что prod() внутренне также возвращает 0, как только он встречается, и, насколько я понимаю, итерации не должны приводить к большим накладным расходам для хранения промежуточного результата умножения в памяти.
Я все это понимаю () здесь следует использовать, но есть ли какая-нибудь значительная разница, которую я упускаю из виду? Думаю, так и должно быть, поскольку bool(prod( ... ) значительно (~45%) медленнее:
import time

n=100_000

t0 = time.time()

for _ in range(n):
bool(prod(randint(0,9)>0 for _ in range(10)))

t_bool_prod=time.time()-t0

t1=time.time()

for _ in range(n):
all(randint(0,9)>0 for _ in range(10))

t_all=time.time()-t1

print(f"bool(prod( ... )) takes {round(100*((t_bool_prod/t_all)-1),2)}% longer!")


Подробнее здесь: https://stackoverflow.com/questions/793 ... od-and-all
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»