import functools
#from functools import reduce
functools.reduce(函数, 数据集合),该函数对参数序列中的元素进行累积。函数可以是def写的函数,也可以是lambda写的函数,要有两个参数。数据集合可以是数组、链表、元组等。
数据集合第一和第二个数据进行函数计算后,得到的结果与数据集合的第三个数据进行函数计算,依次类推直到结束。
ans = functools.reduce(lambda x,y:x*y,[1,2,3,4,5])
In [1]: ans
Out[1]: 120
ans = functools.reduce(lambda x,y:x/y,[1,2,3,4,5])
In [2]: ans
Out[2]: 0.008333333333333333
实现与sum类似的功能,但是像长度为n的数据集合用reduce需要调用函数n-1次,时间复杂度为O(n),而sum()选取最优的遍历可以达到更低的时间复杂度。
def SimuSum(x,y):
return x + y
ans = functools.reduce(SimuSum,[1,2,3,4,5])
In [3]: ans
Out[3]: 15
In [4]: sum([1,2,3,4,5])
Out[4]: 15
累乘或者其他累积的函数没有类似累加sum()这样的命令,所以遇到数据集合两个元素处理后再与第三个元素进行相同运算处理可以使用reduce(lambda x,y: 运算, 集合)。