0
点赞
收藏
分享

微信扫一扫

python filter()和map()


标题 Python中的filter()和map()函数的共性和不同点

这两个函数是Python的内建函数,都是针对可迭代的序列经过函数所传的方法返回一个新的可迭代的对象,记住,仅仅返回一个可迭代的对象,这两个是对父类object的一个子继承子类。
map:使用指定方法去作用传入的每个可迭代对象的元素,生成新的可迭代对象。
filter:使用指定方法过滤可迭代对象的元素,从而生成一个新的可迭代对象。
从以上定义可以发现共同点是都可以生成一个新的可迭代对象,但map是针对原序列的每个元素,也就是map不具有逻辑判断的功能,filter根据逻辑判断生成新的迭代对象。 我想,应该可以这样理解。
下面,上代码:

l=(2,5,6,8,4,66)
r=filter(lambda i:i>5,l)
#过滤列表l中所有大于5的数字
print(list(r))
#指定返回的对象类型为列表并打印
[6, 8, 66]
#执行结果
#如果没有使用filter,那么,正常的程序是
#首先遍历列表,在遍历的时候设置筛选
#条件,将符合条件的列表写入新的列表
下面是使用map():
r1=map(lambda i:i>5,l)
#同上
print(list(r1))
#同上,指定返回迭代对象的类型为列表
[False, False, True, True, False, True]
#执行结果
下面是列表内元素的乘运算:
l=(2,5,6,8,4,66)
r=filter(lambda i:i*2,l)
r1=map(lambda i:i*2,l)
print(list(r))
print(list(r1))
#执行后,filter没有生效,迭代对象转换
#列表成功,map正常运算
[2, 5, 6, 8, 4, 66]
[4, 10, 12, 16, 8, 132]
补充说一下,filter和map的格式
filter(方法,可迭代对象)
map(方法,可迭代对象)
也就是说,两者的区别在其中的方法细微不同
可迭代对象可以是列表推导式,有兴趣的同学可以
自行验证。


i


举报

相关推荐

0 条评论