|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|