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

Python中常用的几个内置函数:map、reduce、filter

发布时间:2023-06-01 07:57:00

Python中内置的函数及方法数量繁多,而在这许多函数和方法当中,map、reduce 和 filter 位列其中。这篇文章要探讨这三个函数的用途,解释它们的用法,并提供一些例子。在掌握了这几个函数之后,你将有能力写出更清晰、更高效的Python代码。

1. map() 函数

map() 函数是 Python 内置函数之一,它接受一个函数以及一个可迭代对象,对这个可迭代对象中的每个元素执行该函数并返回一个结果列表。

map() 函数的语法如下:

map(function, iterable, ...)

其中 function 是一个函数,iterable 是一个序列。当函数执行时,它将取iterable序列中的 个元素并传递到function函数中进行操作,然后取下一个元素进行同样的操作,直到序列迭代完毕。它返回一个惰性求值的迭代器。

下面是一个示例。假设有一个列表,其中每个元素都是数字型字符串:

num_strings = ['1', '2', '3', '4', '5']

我们可以使用 map() 函数将这些字符串转换为整数:

num_ints = map(int, num_strings)

这里的内置函数 int() 将数字型字符串转换为整数。执行以上代码可以得到结果:

[1, 2, 3, 4, 5]

通过调用 print() 函数输出 num_ints 变量,可以看到其类型为一个 map 对象。

2. reduce() 函数

reduce() 函数是 Python 内置函数之一,它接收一个函数和一个可迭代对象,并使用函数对可迭代对象中的所有元素进行累积计算并返回一个单个值(而不是一个列表)。注意,reduce 在 Python 3.x 中已不再是内置函数,需要从 functools 模块中导入。reduce() 函数的语法如下:

reduce(function, sequence[, initial])

其中 function 是用于计算累积值的函数,sequence 是一个可迭代序列,initial 是一个可选参数,用于指定累积的初始值。当执行 reduce() 时,它依次取出 sequence 的每一个值,并将其作为 argument1 和 argument2 传递给 function 函数,function 将处理后的结果作为 argument1 传递给下一个元素,依次进行,直到序列中的所有元素都被处理完毕。下面是一个简单的例子。假设有一组数字,我们想要计算它们的累加和:

from functools import reduce

numbers = [1, 2, 3, 4, 5]

total = reduce(lambda x, y: x + y, numbers)

reduce() 函数中采用了一个 lambda 函数,它计算两个变量 x 和 y 的和。注意,这个函数必须以 2 个参数的形式接收。最终,total 变量存储的是这些数字的累加和,也就是 15。

3. filter() 函数

最后是 filter() 函数。filter() 函数是 Python 内置函数之一,它接受一个函数和一个可迭代序列,并返回一个仅包含符合函数规定条件的元素的列表。filter() 函数的语法如下:

filter(function, iterable)

其中 function 是用于筛选的函数,iterable 是一个序列。当执行 filter() 时,它依次取出 iterable 序列中的每一个元素,并将其作为 argument 传递给函数,函数对该元素进行计算,如果返回 True,则该元素加入到返回的列表中。下面是一个示例。假设有一组数字,我们想要将其中的偶数挑选出来:

numbers = [1, 2, 3, 4, 5]

evens = filter(lambda x: x % 2 == 0, numbers)

这里使用了一个 lambda 函数来计算每个数字是否是偶数。此时 evens 变量将包含数字 2 和 4。

总结:

在Python中,map、reduce和filter是最常用的内置函数之一。map() 接收一个或多个序列,并对其进行函数变换,返回新的列表;reduce() 按顺序对列表中的元素应用一个函数并返回一个单一的值;filter() 接收一个序列,并对其进行筛选,返回一个新列表。了解这三个函数,可以帮助我们更加有效地处理各种数据集和任务。