引言
在python数据处理过程中,map函数和filter函数可有效处理数据或筛选出符合条件的数据元素,它们在使用过程中经常嵌入lambda匿名函数。所以本文在介绍两个魔法函数之前,先简单介绍一下匿名函数lambda的使用。
目录
一、lambda匿名函数
1.语法
lambda arguments : expression
arguments:参数列表,可以没有参数也可以是多个参数,参数间用逗号分割。
expression: 表达式描述函数的返回值。
2.示例代码
result = lambda x,y:x+y
print(result(2,3)) #结果为5
3.注意事项
(1)lambda函数只能写一个表达式作为函数的返回值。
(2)lambda函数作为一个匿名函数,没有自己的名称。
(3)lambda函数语法简洁不能进行太复杂的逻辑计算,可以嵌入其他函数代码块中。
二、map()
1.语法
map(func,*iterables)
func参数:应用到可迭代对象中每一个元素上的函数
iterables参数:可迭代对象(列表、元组等),可迭代对象可以有多个。
2.示例代码
(1)对列表中每个元素*2
def multiply(x):
return x*2
data = [1,2,3,4]
result = map(multiply,data)
print(list(result)) #结果 [2, 4, 6, 8]
应用lambda匿名函数书写代码更简洁逻辑更清晰
result = map(lambda x:x*2,data)
(2)两个列表元素相乘
def multiply(x,y):
return x*y
data_1 = [1,2,3,4]
data_2 = [3,4,5,6,7]
result = map(multiply,data_1,data_2)
print(list(result))
3.注意事项
map()函数中的func函数对可迭代对象中的每个元素逐一处理并返回处理结果,可以用lambda匿名函数书写逻辑更清晰。可迭代对象可以有多个,若两个计算列表长度不一致时,对长列表进行截断处理。map的返回值是一个迭代器,输出结果需要转换成列表,list(map(...))。
三、filter()
1.语法
filter(func,iterable)
根据func函数筛选出符合条件的数据。
func:返回值是布尔值
iterable:可迭代对象
2.示例代码
返回列表中大于2的数
def larger_2(x):
return x>2
data = list(range(5))
print('data: ',data)
result = filter(larger_2,data)
print('result:',list(result))
##################
data: [0, 1, 2, 3, 4]
result: [3, 4]
3.注意事项
filter()函数内的函数部分返回值是一个布尔值,只有将布尔值为真的数据部分输出,函数部分也可以用lambda匿名函数书写。可迭代对象只能有一个而不像map函数可以有多个。filter函数返回值是一个迭代器,要想输出结果需转换成列表list。
四、map函数与filter函数的区别总结
map内部的函数参数输出的是数据的处理结果,而filter内部的函数参数输出的是布尔值,若布尔值为真则输入数据保留并返回。如果用lambda匿名函数书写函数参数部分时,filter返回的是lambda表达式为真的参数,map返回的是lambda表达式的运算结果。
示例:
#lambda函数在filter函数中使用
data = list(range(5))
result = filter(lambda x:x>2,data) #filter返回表达式为真的输入数据
print('result: {}'.format(list(result)))
#lambda函数在map函数中使用
data = list(range(5))
result = map(lambda x:x*2,data) #map返回表达式的处理结果
print('result: {}'.format(list(result)))
参考文献:
Python列表魔法:filter()与map()方法,让你秒变处理高手!_python filter与 map 函数-CSDN博客