python中非常高效且实用的函数:Map和Filter
Map和Filter函数
初见
list(map(lambda x: os.path.join(dirname, x),
filter(lambda x:os.path.splitext(x)[1]==ext, os.listdir(dirname))))
在项目中初见这段代码,很茫然。但好在代码中会给函数名,功能写在名字上。所以,调用起来不是什么问题。但究其功能的实现过程,还是需要一点精力的。
窥探
更多介绍:https://baijiahao.baidu.com/s?id=1653858322655177591&wfr=spider&for=pc
代码中不可避免地会大量使用for循环,那么for循环中是一种怎样的实现过程,可以像函数那样分成各个功能块吗?这里给的答案是,可以。
在for循环中,各个功能块中对应的功能介绍如下:
- 将一系列语句映射到每个值
- 筛选满足特定条件的值
- 或将数据集减少为单个聚合值
而这刚好对应python中三个函数:
- Map:对每个项应用相同的步骤集,存储结果
- Filter:应用验证条件,存储计算结果为 True 的项
- Reduce:返回一个从元素传递到元素的值
实践
map函数:https://www.runoob.com/python/python-func-map.html
filter函数:https://www.runoob.com/python/python-func-filter.html
语法:
map(function, iterable, …)
一般是对一个或者多个iterable的list中的每个元素执行function, 返回包含每次 function 函数返回值的新列表(python3中是返回迭代器)。
filter(function, iterable)
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
总结
对于代码的可读性有一定的影响。不过,使用这些函数来替代for循环并单独做成函数,代码会变得更为简洁,且这种方式对文件搜索或者其他列表操作也都有实用性,值得在以后的实践中尝试。