I’ve been looking through a tutorial and book but I can find no mention of a built in product function i.e. of the same type as sum(), but I could not find anything such as `prod()`.

Is the only way I could find the product of items in a list by importing the `mul()` operator?

## 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.8
218.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 = 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 has many really cool functions for lists!