Есть ли встроенный продукт () в Python? [дубликат]
этот вопрос уже есть ответ здесь:
Я просматривал учебник и книгу, но я не могу найти упоминания о встроенной функции продукта, т. е. того же типа, что и sum (), но я не мог найти ничего такого, как prod()
.
это единственный способ, которым я мог бы найти продукт элементов в списке, импортировав mul()
оператор?
4 ответа:
заявление
Да, это верно. Гвидо отверг идею для встроенной функции prod (), потому что он думал, что это редко нужно.
альтернатива с уменьшением ()
как вы предложили, это не трудно сделать свой собственный, используя уменьшить() и оператора.mul ():
def prod(iterable): return reduce(operator.mul, iterable, 1) >>> prod(range(1, 5)) 24
в Python 3,уменьшить() функция была перемещена в элемент модуль functools, так что вам нужно будет добавить:
from functools import reduce
конкретный случай: факториалы
в качестве примечания, основной мотивирующий случай использования для prod () для вычисления факториалов. У нас уже есть поддержка для этого в математика модуль:
>>> import math >>> math.factorial(10) 3628800
альтернатива с логарифмами
если ваши данные состоят из поплавков, вы можете вычислить продукт с помощью sum () с экспонентами и логарифмы:
>>> from math import log, exp >>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8] >>> exp(sum(map(log, data))) 218.53799999999993 >>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8 218.53799999999998
нет
product
в Python, но вы можете определить его какdef product(iterable): return reduce(operator.mul, iterable, 1)
или, если у вас есть NumPy, используйте
numpy.product
.
Так как функция reduce () была удалена в python 3.0, вы должны принять другой подход.
вы могли бы использовать
functools.reduce()
чтобы сделать изменение несчастным:product = functools.reduce(operator.mul, iterable, 1)
или, если вы хотите следовать духу python-team (который удален
reduce()
потому что они думаютfor
было бы более читаемым), сделайте это с помощью цикла:product = 1 for x in iterable: product *= x