reduce()源码:
def reduce(function, sequence, initial=None): # real signature unknown; restored from __doc__
"""
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5). If initial is present, it is placed before the items
of the sequence in the calculation, and serves as a default when the
sequence is empty.
"""
pass
从上述可以看到,reduce()有三个参数,第一个是函数function,第二个是序列sequence,第三个是initial,为初始值,默认为None
reduce(func,lst),其中func必须至少有两个参数。每次func计算的结果继续和序列的下⼀个元素做累积计算。
注意:reduce()传⼊的参数func必须至少接收2个参数。
需求:计算 list1 序列中各个数字的累加和。
示例代码1:
import functools
list1 = [1, 2, 3, 4, 5]
# 方法一
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result) # 15
# 方法二
result2 = functools.reduce(lambda x, y: x + y, list1)
print(result2)
运行结果:
示例代码2:
import functools
list1 = [1, 2, 3, 4, 5]
# 方法一
def func(a, b):
return a * b
result = functools.reduce(func, list1)
print(result) # 15
# 方法二
result2 = functools.reduce(lambda x, y: x * y, list1)
print(result2)
运行结果:
示例代码3:
import functools
list1 = [1, 2, 3, 4, 5]
list2 = [1, 1, 1, 1, 1]
list3 = [0, 0, 0, 0, 0]
list4 = [0, 0, 0, 0, 1]
result1 = functools.reduce(lambda x, y: x & y, list1)
result2 = functools.reduce(lambda x, y: x & y, list2)
result3 = functools.reduce(lambda x, y: x | y, list3)
result4 = functools.reduce(lambda x, y: x | y, list4)
print(result1)
print(result2)
print(result3)
print(result4)
运行结果:
示例代码4:
from functools import reduce
def add(x, y):
return x + y
a = [1, 2, 3, 4, 5]
# reduce()两个参数
ret1 = reduce(add, a)
print(ret1)
# reduce()三个参数
ret2 = reduce(add, a, 6)
print(ret2)
运行结果: