携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
0 环境
- 编辑器:idea或vscode
- 系统版本:windows10
- python版本:3.9.6
1 前言
之前学到了sorted排序,下面把剩余的函数,都介绍一遍。
2 map函数
如下,使用help命令查看map函数。当我们看到__iter__,next,是不是已经猜到了。
对每个可迭代的对象进行一个迭代。如下代码:假如直接打印map函数的调用,我们只会得到<map at 一串十六进制>
,显然这个结果非我们的真正想要的,想查看每个age的值,一种方式是用list(生成器)的方式转,还有一种方式呢,就是用for循环,得到它们的age值。
def demo10():
Emp = namedtuple("Emp", ["username", "age"])
emps = [Emp("zhangsan", 102), Emp("lisi", 92), Emp("wangwu", 32), Emp("wuming", 88)]
print(map(lambda x: x.age, emps))
print(list(map(lambda x: x.age, emps)))
for item in map(lambda x: x.age, emps):
print(item)
3 filter函数
help打印filter,结果如下,是不是和map有点像。看单词就能猜到了吧,过滤,过滤什么呢,我们过滤掉不想要的,或者说符合我们需要的,留下,不符合的过滤,这里通过函数返回True或False,True则存在,留下,False不存在,过滤掉,python的filter和js中的filter类似。
比如得到小于90岁的人,这里使用lambda判断小于90的人,最后用list转换一下,得到最终的值。
def demo11():
Emp = namedtuple("Emp", ["username", "age"])
emps = [Emp("zhangsan", 102), Emp("lisi", 92), Emp("wangwu", 32), Emp("wuming", 88)]
print(list(filter(lambda x: x.age < 90, emps)))
if __name__ == '__main__':
demo11()
4 总结
如上面的代码,map函数,比如我只要age对应的值,其他的不需要,map就很好的帮我们解决,很像知道map的实现,可类比后面这个代码(fn(item) for item in iter)
。而filter和map是不太一样的,map的目的是得到每个Emp里的age中,而filter是为了得到符合项的Emp值,它的函数是为做条件判断,符合的留下,不符合的过滤,比如招人超过35岁不要。filter的实现类比(item for item in iter if fn(x))
。map和filter相似之处就是,使用它们,需要使用list或for...in循环,才能拿到值。学会这两个函数,是不是觉得节省了不少代码,而且看起来也高大上多了。