当我们要对数据进行归约(reduce)操作时,可以使用Python的reduce()
函数完成。而如果需要对数据进行高阶归约(高阶函数作为归约函数),我们可以使用Python的functools.reduce()
函数。
标准的高阶归约函数定义
functools.reduce()
函数的第一个参数是归约函数,该函数必须接受两个参数,返回一个值。剩下的参数是可遍历的对象,如列表、元组等。
具体来说,functools.reduce()
函数的定义如下:
functools.reduce(function, iterable[, initializer])
其中:
function
:归约函数;iterable
:可遍历对象;initializer
:初始值,可以不填。如果提供了初始值,归约过程会从该值开始。如果没有提供初始值,归约函数会从可遍历对象的第一个元素开始。
高阶归约函数示例
下面通过两个示例来演示高阶归约函数的使用。
示例一
假设有一个列表,其中包含多个数字。我们需要对这些数字进行加和运算。这可以使用reduce()
函数完成,如下所示:
import functools
lst = [1, 2, 3, 4, 5]
total = functools.reduce(lambda x, y: x + y, lst)
print(total)
输出:
15
在上面的示例中,我们创建了一个包含数字的列表lst
,然后使用reduce()
函数对这个列表进行归约操作。归约过程使用了一个lambda表达式作为归约函数:lambda x, y: x + y
。这个表达式接受两个参数,然后返回这两个参数的和。
示例二
假设有多个字符串,我们需要将这些字符串连接起来。这可以使用reduce()
函数完成,如下所示:
import functools
lst = ['hello', ' ', 'world', '!']
text = functools.reduce(lambda x, y: x + y, lst)
print(text)
输出:
hello world!
在上面的示例中,我们创建了一个包含多个字符串的列表lst
,然后使用reduce()
函数对这个列表进行归约操作。归约过程使用了一个lambda表达式作为归约函数:lambda x, y: x + y
。这个表达式接受两个参数,然后返回这两个参数的连接结果。