马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Python reduce() 函数
reduce() 函数会对序列中的元素进行累积。
reduce() 将一个序列中的所有数据进行下列处理:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,得到的结果再与第四个数据用 function 函数运算 …… 最后得出的结果将被返回。
reduce() 函数有点像这样:
def reduce(func, seq):
if len(seq) == 1:
return seq[0]
val = func(seq[0], seq[1])
for i in seq[2:]:
val = func(val, i)
return val
注意:在 Python 2 中,reduce() 是内置函数,可以直接调用;但在 Python 3,reduce() 被移植到了 functools 模块中,需要先从 functools 模块导入 reduce() 才可以使用。
例如,用 reduce() 对序列求和:
>>> from functools import reduce
>>> list1 = [1, 2, 3, 4, 5]
>>> reduce(lambda x, y: x + y, list1)
15
求序列的乘积:
>>> from functools import reduce
>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8]
>>> reduce(lambda x, y: x * y, list1)
40320
但为了提高代码的可读性,建议用 for 循环实现:
>>> product = 1
>>> for i in list1:
product *= i
>>> product
40320
reduce() 函数还有一个 initial 参数,用于指定初始化的值。例如:
>>> from functools import reduce
>>> reduce(lambda x, y: x + y, [8, 8, 9, 9], 10) # 8 + 8 + 9 + 9 + 10
44
注意:reduce() 函数传参时不能使用关键字参数,否则会报错:
reduce(lambda x, y: x + y, [8, 8, 9, 9], initial=10)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
reduce(lambda x, y: x + y, [8, 8, 9, 9], initial=10)
TypeError: reduce() takes no keyword arguments
|