Is there a built-in product() in Python? [duplicate] Is there a built-in product() in Python? [duplicate] python python

Is there a built-in product() in Python? [duplicate]


Pronouncement

Yes, that's right. Guido rejected the idea for a built-in prod() function because he thought it was rarely needed.

Python 3.8 Update

In Python 3.8, prod() was added to the math module:

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

Alternative with reduce()

As you suggested, it is not hard to make your own using reduce() and operator.mul():

def prod(iterable):    return reduce(operator.mul, iterable, 1)>>> prod(range(1, 5))24

In Python 3, the reduce() function was moved to the functools module, so you would need to add:

from functools import reduce

Specific case: Factorials

As a side note, the primary motivating use case for prod() is to compute factorials. We already have support for that in the math module:

>>> import math>>> math.factorial(10)3628800

Alternative with logarithms

If your data consists of floats, you can compute a product using sum() with exponents and logarithms:

>>> 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.8218.53799999999998


There is no product in Python, but you can define it as

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

Or, if you have NumPy, use numpy.product.


Since the reduce() function has been moved to the module functools python 3.0, you have to take a different approach.

You can use functools.reduce() to access the function:

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

Or, if you want to follow the spirit of the python-team (which removed reduce() because they think for would be more readable), do it with a loop:

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