Что это за функция, подобная sum(), но предназначенная для умножения?продукт()?
Вопрос
Питоновский sum()
функция возвращает сумму чисел в итерируемом файле.
sum([3,4,5]) == 3 + 4 + 5 == 12
Я ищу функцию, которая вместо этого возвращает продукт.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
Я почти уверен, что такая функция существует, но я не могу ее найти.
Решение
На самом деле, Гвидо наложил вето на эту идею: 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)
Другие советы
Обновить:
В Python 3.8 подталкивать функция была добавлена в математика модуль.Видишь: математический прод().
Более старая информация:Python 3.7 и более ранние версии
Функция, которую вы ищете, будет вызвана толчок() или продукт() но в Python нет такой функции.Итак, вам нужно написать свой собственный (что несложно).
Заявление о prod()
Да, это верно.Гвидо отверг эту идею для встроенной функции prod(), потому что он думал, что это редко требуется.
Альтернатива с reduce()
Как вы предположили, нетрудно создать свой собственный, используя уменьшить() и оператор.mul():
from functools import reduce
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
В Python 3, the уменьшить() функция была перемещена в модуль функциональных инструментов, поэтому вам нужно было бы добавить:
from functools import reduce
Конкретный случай:Факториалы
В качестве дополнительного примечания, основной мотивирующий пример использования для толчок() заключается в вычислении факториалов.У нас уже есть поддержка для этого в математический модуль:
>>> import math
>>> math.factorial(10)
3628800
Альтернатива с логарифмами
Если ваши данные состоят из значений с плавающей запятой, вы можете вычислить продукт, используя сумма() с экспонентами и логарифмами:
>>> 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
Обратите внимание, что использование журнал () требуется, чтобы все входные данные были положительными.
Встроенного устройства нет, но его легко создать самостоятельно, как показано на примере здесь:
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
Смотрите ответы на этот вопрос:
Какой модуль Python подходит для манипулирования данными в списке?
Там есть prod()
в numpy это делает то, о чем вы просите.
Numeric.product
( или
reduce(lambda x,y:x*y,[3,4,5])
)
Используй это
def prod(iterable):
p = 1
for n in iterable:
p *= n
return p
Поскольку нет встроенного prod
функция.
Я предпочитаю ответы a и b выше использовалось функции.уменьшить() и тот ответ используя numpy.prod() numpy.prod(), но вот еще одно решение , использующее itertools.аккумулировать():
import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]
Возможно, не "встроенный", но я считаю его встроенным.в любом случае, просто используйте numpy
import numpy
prod_sum = numpy.prod(some_list)