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

Python内置函数:map()、filter()和reduce()详解

发布时间:2023-06-24 19:22:26

Python内置函数map()、filter()和reduce()是编程中常用的三个高阶函数。它们可以有效地处理序列(列表、元组等)或可迭代对象(如range()函数返回的对象)中的元素,将一个或多个函数应用于序列中的每个元素,并在返回结果时对其进行处理。

map(function, iterable)

map()函数将一个函数应用于一个或多个可迭代对象(包括序列、元组、集合等),并返回一个迭代器,该迭代器为一个列表,其中包括在应用函数之后得到的所有结果。

例如,我们可以使用map()函数将一个序列中的每个元素都平方,并返回一个新的结果序列:

seq = [1, 2, 3, 4, 5]
result = map(lambda x: x ** 2, seq)
print(list(result))

输出结果为:

[1, 4, 9, 16, 25]

上述代码中,我们将序列seq中的每个元素应用于lambda函数,并将结果储存在迭代器中,然后使用list()函数将迭代器转换为列表。

filter(function, iterable)

filter()函数根据给定的函数从序列中过滤元素,并返回一个迭代器,包括那些被函数调用返回True的元素。

例如,我们可以使用filter()函数从一个序列中删除所有偶数元素,然后返回一个新的序列:

seq = [1, 2, 3, 4, 5]
result = filter(lambda x: x % 2 != 0, seq)
print(list(result))

输出结果为:

[1, 3, 5]

上述代码中,我们使用lambda函数检查序列元素是否为奇数,并将结果储存在迭代器中,然后使用list()函数将迭代器转换为列表。

reduce(function, iterable[, initializer])

reduce()函数从左到右以一个二元函数的方式对序列元素进行累积,返回一个仅包含一个值的新序列。它首先将函数对序列的前两个元素进行操作,然后应用到结果和下一个元素上,直到序列的所有元素都被遍历。

例如,我们可以使用reduce()函数计算一个序列的乘积:

import functools

seq = [1, 2, 3, 4, 5]
result = functools.reduce(lambda x, y: x * y, seq)
print(result)

输出结果为:

120

上述代码中,我们使用lambda函数将序列中的元素逐个相乘,并将结果储存在变量result中。

最后,需要注意的是,如果在使用map()、filter()或reduce()函数时发现没有输出结果,请确保将结果储存在一个列表、元组或集合等可迭代对象中。否则,map()、filter()或reduce()函数将返回一个迭代器,而不是直接打印结果。