Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

произнесение

Да, это правильно. Гвидо отверг идею встроенной функции prod(), потому что он думал, что она редко нужна.

Обновление Python 3.8

В Python 3.8 prod() был добавлен в математический модуль:

>>> from math import prod
>>> prod(range(1, 11))
3628800

Альтернатива с помощью Reduce()

Как вы предложили, нетрудно сделать свой собственный, используя redu() и operator.mul():

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

В Python нет product, но вы можете определить его как

def product(iterable):
    return reduce(operator.mul, iterable, 1)

Или, если у вас есть NumPy, используйте numpy.product.

Ответ 3

Поскольку функция functools() была перенесена в модуль functools python 3.0, вы должны использовать другой подход.

Вы можете использовать functools.reduce() для доступа к функции:

product = functools.reduce(operator.mul, iterable, 1)

Или, если вы хотите, чтобы следовать духу питона-команды (который удален reduce(), потому что они думают, что for будет более удобным для чтения), сделайте это с помощью цикла:

product = 1
for x in iterable:
    product *= x

Ответ 4

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 имеет много действительно классных функций для списков!