reduce() in Python
Last Updated :
20 Jun, 2024
The reduce(fun,seq) function is used to apply a particular function passed in its argument to all of the list elements mentioned in the sequence passed along.This function is defined in “functools” module.
Working :
- At first step, first two elements of sequence are picked and the result is obtained.
- Next step is to apply the same function to the previously attained result and the number just succeeding the second element and the result is again stored.
- This process continues till no more elements are left in the container.
- The final returned result is returned and printed on console.
Python3
# python code to demonstrate working of reduce()
# importing functools for reduce()
import functools
# initializing list
lis = [1, 3, 5, 6, 2]
# using reduce to compute sum of list
print("The sum of the list elements is : ", end="")
print(functools.reduce(lambda a, b: a+b, lis))
# using reduce to compute maximum element from list
print("The maximum element of the list is : ", end="")
print(functools.reduce(lambda a, b: a if a > b else b, lis))
OutputThe sum of the list elements is : 17
The maximum element of the list is : 6
Using Operator Functions
reduce() can also be combined with operator functions to achieve the similar functionality as with lambda functions and makes the code more readable.
Python3
# python code to demonstrate working of reduce()
# using operator functions
# importing functools for reduce()
import functools
# importing operator for operator functions
import operator
# initializing list
lis = [1, 3, 5, 6, 2]
# using reduce to compute sum of list
# using operator functions
print("The sum of the list elements is : ", end="")
print(functools.reduce(operator.add, lis))
# using reduce to compute product
# using operator functions
print("The product of list elements is : ", end="")
print(functools.reduce(operator.mul, lis))
# using reduce to concatenate string
print("The concatenated product is : ", end="")
print(functools.reduce(operator.add, ["geeks", "for", "geeks"]))
OutputThe sum of the list elements is : 17
The product of list elements is : 180
The concatenated product is : geeksforgeeks
reduce() vs accumulate()
Both reduce() and accumulate() can be used to calculate the summation of a sequence elements. But there are differences in the implementation aspects in both of these.
- reduce() is defined in “functools” module, accumulate() in “itertools” module.
- reduce() stores the intermediate result and only returns the final summation value. Whereas, accumulate() returns a iterator containing the intermediate results. The last number of the iterator returned is summation value of the list.
- reduce(fun, seq) takes function as 1st and sequence as 2nd argument. In contrast accumulate(seq, fun) takes sequence as 1st argument and function as 2nd argument.
Python3
# python code to demonstrate summation
# using reduce() and accumulate()
# importing itertools for accumulate()
import itertools
# importing functools for reduce()
import functools
# initializing list
lis = [1, 3, 4, 10, 4]
# printing summation using accumulate()
print("The summation of list using accumulate is :", end="")
print(list(itertools.accumulate(lis, lambda x, y: x+y)))
# printing summation using reduce()
print("The summation of list using reduce is :", end="")
print(functools.reduce(lambda x, y: x+y, lis))
OutputThe summation of list using accumulate is :[1, 4, 8, 18, 22]
The summation of list using reduce is :22
reduce() function with three parameters
Reduce function i.e. reduce() function works with 3 parameters in python3 as well as for 2 parameters. To put it in a simple way reduce() places the 3rd parameter before the value of the second one, if it’s present. Thus, it means that if the 2nd argument is an empty sequence, then 3rd argument serves as the default one.
Here is an example :(This example has been take from the functools.reduce() documentation includes a Python version of the function:
Python
# Python program to illustrate sum of two numbers.
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
# Note that the initializer, when not None, is used as the first value instead of the first value from iterable , and after the whole iterable.
tup = (2,1,0,2,2,0,0,2)
print(reduce(lambda x, y: x+y, tup,6))
# This code is contributed by aashutoshjha
This article is contributed by Manjeet Singh(S.Nandini).
reduce() in Python – FAQs
What is the reduce
method in a list?
The reduce
function is used to apply a function of two arguments cumulatively to the items of a list (or any iterable), from left to right, so as to reduce the iterable to a single value. It’s not a method of the list but a function in the functools
module.
What is the return value of reduce()
function?
The return value of the reduce()
function is a single value, which is the result of the cumulative application of the provided function to the elements of the iterable.
Which module should we import to use the reduce()
function?
To use the reduce()
function, you need to import it from the functools
module.
How to import the reduce
function from the functools
module?
You can import the reduce
function from the functools
module using the following import statement:
from functools import reduce
What is the difference between reduce
and accumulate
?
- Purpose: Reduces an iterable to a single value by cumulatively applying a function.
- Return Value: A single value.
- Usage Example:
from functools import reduce
# Example: Sum of all elements
numbers = [1, 2, 3, 4]
result = reduce(lambda x, y: x + y, numbers)
print(result) # Output: 10
- reduce:
- accumulate:
- Purpose: Computes accumulated results of applying a function (like cumulative sum) and returns an iterator with intermediate results.
- Return Value: An iterator containing the accumulated results.
- Module:
itertools
- Usage Example:
from itertools import accumulate
# Example: Cumulative sum of all elements
numbers = [1, 2, 3, 4]
result = list(accumulate(numbers, lambda x, y: x + y))
print(result) # Output: [1, 3, 6, 10]
Please Login to comment...