Что такое функция sum (), но для умножения? продукт()?
в Python sum()
функция возвращает сумму чисел в массиве.
sum([3,4,5]) == 3 + 4 + 5 == 12
Я ищу функцию, которая возвращает вместо продукта.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
я почти уверен, что такая функция существует, но я не могу ее найти.
7 ответов:
резюме
функция, которую вы ищете, будет называться prod () или product () но Python не имеет этой функции. Итак, вам нужно написать свой собственный (это легко).
произнесение на prod ()
Да, это верно. Гвидо отверг идею для встроенной функции 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
на самом деле, Гвидо наложил вето на эту идею:http://bugs.python.org/issue1093
но, как отмечалось в этом выпуске, вы можете сделать это довольно легко:
from functools import reduce # Valid in Python 2.6+, required in Python 3 import operator reduce(operator.mul, (3, 4, 5), 1)
там не один встроенный, но это просто свернуть свой собственный, как показано здесь:
import operator def prod(factors): return reduce(operator.mul, factors, 1)
посмотреть ответы на этот вопрос:
здесь
prod()
в numpy это делает то, что вы просите.
Я предпочитаю ответы a и b, С помощью functools.уменьшить() и ответ используя numpy.prod (), но вот еще одно решение с использованием itertools.накопить ():
import itertools import operator prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]