Table of Contents
The reduce function performs calculation on all elements by iterating on items
of an iterable. For example, we can find out the product of all numbers of a
list. The function reduce can be imported from functools builtin library.
The first parameter of the reduce function takes a function as a parameter
that takes exactly 2 arguments. To reduce the iterable it first takes first 2
elements and performs operation. The result of them is then fed to the function
again with another element until the iterable gets exhausted.
from functools import reduce
numbers = [1, 12, 30, 24, 8, 11, 15, ]
result = reduce(lambda x, y: x * y, numbers)
print(result) # 11404800Explanation of the above function:
function: lambda x, y: x * y
- step1:
lambda=>1 * 12=12 - step2:
lambda=>12 * 30=360 - step3:
lambda=>360 * 24=8640 - step4:
lambda=>8640 * 8=69120 - step5:
lambda=>69120 * 11=760320 - step6:
lambda=>760320 * 15=11404800
Note: We might mistakenly think that we could find out sum of squares with the
reducefunction by passing lambda aslambda x,y: x**2 + y**2but it end up giving very large number since it finds out square of first 2 numbers and in the next iteration, it again finds out the square of the past result and add it with the square of the next occurrence.
Explanation:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x ** 2 + y ** 2, numbers)
print(result) # 1373609here we might think that the reduce function does 1 + 4 + 9 + 16 + 25 but it
does something like below:
[{(1 + 4) ** 2 + 9} ** 2 + 16] ** 2 + 25 which will be equal to 1373609
- step 1:
lambda=>1 ** 2 + 2 ** 2=1 + 4=5 - step 2:
lambda=>5 ** 2 + 3 ** 2=25 + 9=34 - step 3:
lambda=>34 ** 2 + 4 ** 2=1156 + 16=1172 - step 4:
lambda=>1172 ** 2 + 5 ** 2=1,373,584 + 25=1373609