Python 中的 reduce() 函数详解
Python中的reduce函数是一个二元关联函数,它把两个参数作用于一个序列(x1, x2, x3, ... xn),reduce把结果继续和序列的下一个元素做累积计算,其效果如下:
reduce(function, sequence[, initial_value])
其中:
- function:一个二元函数,它必须接受两个参数,reduce函数用它来计算累计结果。
- sequence:一个序列,reduce函数会把它里面的元素依次作为参数传递给function函数。
- initial_value:这是一个可选参数,如果传入了它,则在序列前面插入一个元素,作为初始值。
下面我们来看下如何使用reduce函数:
1. 求和
先来看一下如何使用for循环来实现列表中所有元素的和:
lst = [1, 2, 3, 4, 5]
sum = 0
for i in lst:
sum += i
print(sum)
输出结果为:15
使用reduce函数可以简化这个过程:
from functools import reduce
lst = [1, 2, 3, 4, 5]
sum = reduce(lambda a, b: a + b, lst)
print(sum)
输出结果:15
其中lambda表达式用来实现两个数相加的功能。
2. 求最大值
假设我们要对一个序列求最大值,使用reduce函数可以这样实现:
from functools import reduce
lst = [1, 5, 2, 6, 3, 7, 4]
max = reduce(lambda a, b: a if a > b else b, lst)
print(max)
输出结果为:7
3. 字符串连接
使用reduce函数也可以对一个字符串列表进行连接操作:
from functools import reduce
lst = ['a', 'b', 'c', 'd', 'e']
str = reduce(lambda a, b: a + b, lst)
print(str)
输出结果为:'abcde'
4. 求阶乘
我们知道,阶乘是一个数和比它小的数的乘积,如5! = 5 * 4 * 3 * 2 * 1。以下是通过for循环实现求阶乘的过程:
n = 5
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(factorial)
输出结果:120
使用reduce函数可以更简洁地实现:
from functools import reduce
n = 5
factorial = reduce(lambda a, b: a * b, range(1, n + 1))
print(factorial)
输出结果:120
这里需要注意的是,range()函数返回的是一个序列,所以需要传入sequence参数。
5. 累计求和
当我们需要对一个序列进行累计求和时,也可以使用reduce函数来实现:
from functools import reduce
lst = [1, 2, 3, 4, 5]
cumulative_sum = reduce(lambda a, b: a + b, lst, 0)
print(cumulative_sum)
输出结果为:15
其中,初始值为0。
总结
reduce函数的作用是对序列进行累计计算,可以大大简化代码。需要注意的是,reduce函数在Python 3中已经被移动到functools模块中,所以需要先导入functools模块才能使用reduce函数。
