python 高阶函数之filter
2024-08-26 19:43:06
前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter。
先看一下filter() 函数签名
>>> help(filter)
Help on class filter in module builtins:
class filter(object)
| filter(function or None, iterable) --> filter object
|
| Return an iterator yielding those items of iterable for which function(item)
| is true. If function is None, return the items that are true.
和map()函数类似,filter()也是接收一个函数和一个序列作为参数,和map() 不同的是,filter把传入的函数依次作用于序列中的每一个元素,并根据其返回值是True 还是 False 来决定是否保留该元素,达到过滤的效果。
下面举例说明:
从一个list文件列表中筛选出已 .py 结尾的文件,文件列表如下:
files = ["report.py","log.txt", "logger.py",
"config.txt", "main.py"]
首先定义一个函数,其功能是根据传入的文件判断
>>> def is_python_file(file_name):
... if file_name.endswith(".py"):
... return True
... else:
... return False
...
应用filter函数
>>> list(filter(is_python_file, files))
['report.py', 'logger.py', 'main.py']
以上就达到了筛选的功能,很牛吧,不用自己再写一个 for 循环进行判断了。
第一个参数传入 is_python_file 函数对象
第二个参数传入 序列 files列表
多说一句,有的小伙伴对传入的参数函数对象(没加括号)可能有疑惑,如果函数加(),表示函数执行的结果传入 filter
如果感觉定义一个简单的函数麻烦,我们可以使用匿名函数lambda
lambda f:f.endswith(".py")
>>> list(filter(lambda f:f.endswith(".py"), files))
['report.py', 'logger.py', 'main.py']
其实还可以使用列表推导式
>>> [ f for f in files if f.endswith(".py") ]
['report.py', 'logger.py', 'main.py']
python中其他的高阶函数使用方式也是类似的,比如sorted、reduce、reversed。内置常用高阶函数就分享到这里啦,更多分享请关注微信公众号
最新文章
- C#学习资源
- TYVJ P1048 田忌赛马 Label:dp
- C#基础静态类的设计
- linux 修改IP, DNS 命令
- DLNA
- The project target (Android 6.0) was not properly loaded或者The rendering target (Android 6.0) is still loading.
- 【.net 深呼吸】项目中是否有必要删去多余的引用
- javascript : detect at the end of bottom
- Linux Centos 6.9中SSH默认端口修改的坑
- 教程:安装禅道zentao项目管理软件github上的开发版
- hdu 5137(2014广州—最短路)
- jsonp 实现前端跨域
- Delphi非官方的补丁
- Enum扩展特性,代替中文属性
- pHP生成唯一单号
- freeswitch 获取app和api帮助
- Js_字体滚动换颜色
- JAVA-找不到元素 'beans' 的声明
- AOP中Advice执行两遍的原因
- catpcha