欢迎访问宙启技术站
智能推送

Python 归约函数 reduce() 的使用方法

发布时间:2023-06-24 13:25:08

Python 中的归约函数 reduce(),用于对一个序列使用一个归约函数来连续地进行“缩减”操作,直到序列中仅剩下一个元素为止。此函数由 functools 库提供。

reduce() 函数的语法如下:

reduce(function, sequence[, initial])

参数说明:

- function:归约函数。该函数必须接受两个参数,比如 lambda x, y: x + y。对于序列中的元素 x 和 y,将使用该函数对它们进行归约操作,返回一个结果。

- sequence:序列。可以是列表、元组、字符串等。

- initial:初始值。可选参数。如果提供了该参数,则序列中的 项将与该值一起进行归约操作。

下面我们用几个例子来探索 reduce() 的使用方法:

### 案例 1:对序列求和

我们可以使用 reduce() 函数来对序列求和。

例如,对于列表 [1, 2, 3, 4],我们可以使用 reduce() 函数对其进行求和,代码如下:

from functools import reduce

lst = [1, 2, 3, 4]
total = reduce(lambda x, y : x + y, lst)
print(total)

输出结果为:

10

上述代码中,reduce() 函数将先取出序列中的前两个元素 1 和 2,将它们传入 lambda 函数并求和,得到结果 3。然后将结果 3 与序列中的下一个元素 3 进行归约操作,再次调用 lambda 函数并求和,得到结果 6。最后将结果 6 与序列中的最后一个元素 4 进行归约操作,调用 lambda 函数并求和,得到结果 10。

### 案例 2:对字符串进行归约

对于字符串,我们也可以使用 reduce() 函数进行归约操作。例如,我们可以将字符串中的各个字符取出并拼接成一个新的字符串。代码如下:

from functools import reduce

s = "hello world"
new_s = reduce(lambda x, y : x + y, s)
print(new_s)

输出结果为:

hello world

上述代码中,reduce() 函数会从字符串中取出 个字符 "h",作为初始值,然后将它与字符串中的下一个字符 "e" 进行拼接,得到字符串 "he"。然后将结果 "he" 与字符串中的下一个字符 "l" 进行拼接,得到字符串 "hel"。以此类推,最终将字符串中的所有字符拼接成一个新的字符串。

### 案例 3:对列表进行归约

对于嵌套列表,我们也可以使用 reduce() 函数进行归约操作。例如,我们可以将多个列表合并成一个大的列表。代码如下:

from functools import reduce

lst = [[1, 2], [3, 4], [5, 6]]
new_lst = reduce(lambda x, y : x + y, lst)
print(new_lst)

输出结果为:

[1, 2, 3, 4, 5, 6]

上述代码中,reduce() 函数将从列表中取出 个子列表 [1, 2],作为初始值,然后将它与列表中的下一个子列表 [3, 4] 进行拼接,得到新的列表 [1, 2, 3, 4]。以此类推,最终将所有子列表拼接成一个大的列表。

### 案例 4:使用初始值进行归约

有时我们需要在归约操作之前先将一个初始值和序列中的 个元素一起传入归约函数。例如,我们可以使用 reduce() 函数来查找一个列表中的最大值。代码如下:

from functools import reduce

lst = [55, 66, 88, 33, 77, 22]
max_num = reduce(lambda x, y : x if x>y else y, lst, -1)
print(max_num)

输出结果为:

88

上述代码中,reduce() 函数的第三个参数为 -1,表示列表中的 个元素与该值进行归约操作。lambda 函数先比较 -1 和列表中的 个元素 55 的大小,得到较大值 55。然后将该值与列表中的下一个元素 66 进行归约操作,得到较大值 66。以此类推,最终找到了列表中的最大值 88。

综合来说,reduce() 函数是 Python 中非常常用的函数之一,能够帮助我们对序列完成高效的归约操作。在使用时,我们需要结合具体的应用场景来使用。