Есть ли встроенный продукт () в Python? [дубликат]


этот вопрос уже есть ответ здесь:

Я просматривал учебник и книгу, но я не могу найти упоминания о встроенной функции продукта, т. е. того же типа, что и sum (), но я не мог найти ничего такого, как prod().

это единственный способ, которым я мог бы найти продукт элементов в списке, импортировав mul() оператор?

4 71

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
from numpy import multiply, product
list1 = [2,2,2]
list2 = [2,2,2]
mult = 3
prod_of_lists = multiply(list1,list2)
>>>[4,4,4]
prod_of_list_by_mult = multiply(list1,mult)
>>>[6,6,6]
prod_of_single_array = product(list1)
>>>8

numpy имеет много действительно интересных функций для списков!