map()、filter()、reduce()是python内置函数,它们提供了一种便捷的方式来处理可迭代对象中的元素,这些函数在许多编程任务中非常有用,包括数据转换,筛选和累积操作,熟练掌握这些函数的使用方式可以让python编程更加高效和简洁。
本文主要介绍三个基本函数:map()、filter()、reduce()的用法。
用于将一个函数应用到可迭代对象(如列表、元组等)的每个元素上,然后返回一个包含结果的新可迭代对象。
参数 | 描述 |
---|---|
function | 要应用于可迭代对象的函数。 |
iterable | 要进行映射操作的可迭代对象。 |
map()函数可以接受多个可迭代对象,但每个可迭代对象的元素必须一致,它将function应用于可迭代对象的对应元素,并返回一个迭代器,其中包含了所有映射后的结果。
举例1:将列表中的元素转为大写。
words=['abc','nju']
#list(map(upper,words)) #报错,更正
list(map(lambda word:word.upper(),words))
# 输出:
# ['ABC', 'NJU']
# string.upper()函数被应用到words列表的每个元素上,将它们转为大写形式。
举例2:将列表中的元素乘以2。
lst=[3,2,5,8,1]
list(map(lambda x:x*2,lst))
# 输出:
# [6, 4, 10, 16, 2]
举例3:将列表中的元素字符串类型转变为数值型。
lst=['12', '3.4', '567']
lst1=list(map(eval,lst))
print(lst1)
# 输出:
# [12, 3.4, 567]
用于筛选可迭代对象中满足指定条件的元素,然后返回一个包含筛选结果的可迭代对象。
参数 | 描述 |
---|---|
function | 用于筛选元素的函数。该函数返回True或False。 |
iterable | 要进行筛选操作的可迭代对象。 |
filter()函数将function应用于iterable中的每个元素,并保留那些使function返回True的元素,生成一个包含筛选结果的迭代器。
举例1:筛选出偶数。
lst=[3,2,5,8,1]
list(filter(lambda x:x%2==0,lst))
# 输出:
# [2, 8]
在上面这个例子中,lambda函数用于检查每个元素是否为偶数,然后filter()函数筛选出了所有满足条件的元素。
举例2:筛选出长度大于等于5的字符串
words=['hello','sodagreen','world','tomorrow','you','will']
long_words=list(filter(lambda words:len(words)>=5,words))
print(long_words)
# 输出:
# ['hello', 'sodagreen', 'world', 'tomorrow']
reduce()函数用于可迭代对象中的元素进行累积操作,从左到右依次应用指定的函数,将结果汇总为一个值,这在某些情况下非常有用,例如计算累积或查找最大/最小值。
参数 | 描述 |
---|---|
function | 用于累积操作的函数。该函数接受两个参数,并返回一个结果。 |
iterable | 要进行累积操作的可迭代对象。 |
initializer | 可选,累积的初始值。 |
reduce()函数将function应用于iterable中的元素,从左到右依次累积,将结果传递给下一个元素,如果提供了initializer,它将作为累积的初始值,否则iterable的第一个元素作为初始值。
举例1:计算列表中所有元素的和
from functools import reduce
lst=[1,2,3,4,5]
reduce(lambda x,y:x+y,lst)
举例2:计算列表中所有元素的累积乘积
from functools import reduce
lst=[1,2,3,4,5]
reduce(lambda x,y:x*y,lst)
举例3:查找列表中的最大值。
from functools import reduce
lst=[123,12,456,789]
reduce(lambda x,y:x if x>y else y,lst)
参考文档:
https://zhuanlan.zhihu.com/p/662737346