Что за функция типа sum() но для умножения? товар()?
Python sum()
возвращает сумму чисел в итерабельной версии.
sum([3,4,5]) == 3 + 4 + 5 == 12
Я ищу функцию, которая возвращает продукт.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
Я уверен, что такая функция существует, но я не могу ее найти.
Ответы
Ответ 1
Резюме
Функция, которую вы ищете, будет называться prod() или product(), но в Python такой функции нет. Итак, вам нужно написать свой собственный (что легко).
Произношение на прод()
Да, это правильно. Гвидо отверг идею встроенной функции prod(), потому что он думал, что она редко нужна.
Альтернатива с помощью Reduce()
Как вы и предлагали, не сложно сделать свой собственный, используя redu() и operator.mul():
from functools import reduce
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
В Python 3 функция redu () была перемещена в модуль 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
Ответ 2
Собственно, Гвидо наложил вето на идею: 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)
Ответ 3
Существует не один встроенный, но он просто сводит ваши собственные, как показано здесь:
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
См. ответы на этот вопрос:
Какой модуль Python подходит для обработки данных в списке?
Ответ 4
Там prod()
в numpy, который делает то, что вы просите.
Ответ 5
Numeric.product
(или
reduce(lambda x,y:x*y,[3,4,5])
)
Ответ 6
Использовать этот
def prod(iterable):
p = 1
for n in iterable:
p *= n
return p
Так как нет встроенной функции prod
.
Ответ 7
Я предпочитаю ответы < a href= " > a и b выше, используя functools.reduce() и , используя numpy.prod(), но вот еще одно решение, использующее itertools.accumulate()
import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]
Ответ 8
Theres также инструмент продукта в itertools
. https://docs.python.org/2/library/itertools.html
from interools import product
area = product(length, width)