Python简明讲解filter函数的用法
作者:阿黎逸阳 时间:2021-07-24 13:00:38
任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。
一、filter函数的定义
filter函数是Python中常用的内置函数,调用无需加载库,直接使用即可。它主要用来根据特定条件过滤迭代器中不符合条件的元素,返回一个惰性计算的filter对象或迭代器。需要用list函数进行转换,才能得到符合的条件元素组成的新列表。
其基本调用语法如下:
filter(function or None, iterable)
function:函数,作用是对iterable中的每个元素判断是否符合特定条件。
None:不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素。
iterables:可迭代对象(序列、字典等)。
二、filter函数实例
求一个序列中大于零的元素组成的新序列
我们先来看下filter函数不加list的结果,代码如下:
c = [-10, 28, 9, -5, 30, 5]
filter(lambda a:a>0, c)
得到结果:
<filter at 0x27950dbb9d0>
返回一个惰性计算的filter对象或迭代器。接下来看下用list函数进行转换会得到什么,代码如下:
c = [-10, 28, 9, -5, 30, 5]
list(filter(lambda a:a>0, c))
得到结果:
[28, 9, 30, 5]
从结果知,filter函数的作用是挑选出了序列c中大于0的元素组成了新的对象或迭代器。通过list函数进行转换,进而得到符合条件的元素组成的新列表。如果有朋友对代码中的lambda函数不熟悉,可以参考【Python常用函数】一文让你彻底掌握Python中的lambda函数。
求序列中非零数组成的新序列
在filter函数定义中提到,filter函数中参数None表示不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素。
测试代码如下:
#找出序列中的非0数
c2 = [4, 9, 0, -5, -8, 7, 0]
list(filter(None, c2))
得到结果:
[4, 9, -5, -8, 7]
由于0在Python中默认为False,非0默认为True,所以在筛选过程中对0进行了过滤。
求字典中大于2的键组成的新序列
在filter函数定义中提到,它对可迭代对象进行处理,所以包括了列表和字典等对象。前两个例题都是对列表进行处理,本例看下对字典的处理。代码如下:
#找出字典中大于2的键
list(filter(lambda x:x>2, {1:'杨紫', 2:'刘诗雯', 3:'张继科', 4:'王明', 5:'刘明'}))
得到结果:
[3, 4, 5]
从结果知,filter函数对字典进行处理的时候,筛选的对象是字典的键,而不是字典的值。
求100以内既是3的倍数又是奇数的正整数
最后我们来看一个小学常常碰到的题,求100以内既是3的倍数又是奇数的正整数。代码如下:
#求100以内既是奇数又是3的倍数的正整数
import numpy as np
list(filter(lambda x:x%2!=0 and x%3==0, np.arange(1, 101)))
得到结果:
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
其中np.arange(1, 101))表示1到100公差为1的等差数列。
x%2!=0表示该数不能整除2,即为奇数。
x%3==0表示该数能整除3,即为3的倍数。
可以人工复核一下,发现Python得到的结果是正确的。
来源:https://blog.csdn.net/qq_32532663/article/details/125460944
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
全屏flash的尺寸分析
![](https://img.aspxhome.com/file/UploadPic/20092/11/01-11s.jpg)
用Python编写个解释器实现方法接受
![](https://img.aspxhome.com/file/2023/5/65505_0s.png)
python发送邮件脚本
python openCV实现摄像头获取人脸图片
![](https://img.aspxhome.com/file/2023/5/68475_0s.jpg)
Python中三个不可思议的返回功能分享
关于利用:first-letter实现首字下沉的一些看法
![](https://img.aspxhome.com/file/UploadPic/20104/20/first-letter_no_float-38s.png)
HTML 5新增的元素
Python利用物理引擎Pymunk编写一个解压小游戏
![](https://img.aspxhome.com/file/2023/4/78704_0s.png)
SQL Server中多行多列连接成为单行单列
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
![](https://img.aspxhome.com/file/2023/7/79697_0s.png)
asp防止盗链HTTP_REFERER判断代码
django模板语法学习之include示例详解
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
![](https://img.aspxhome.com/file/2023/3/100863_0s.gif)
初学js者对javascript面向对象的认识分析
利用Python复制文件的9种方法总结
![](https://img.aspxhome.com/file/2023/6/70656_0s.png)
介绍Python中的一些高级编程技巧
树莓派4B+opencv4+python 打开摄像头的实现方法
![](https://img.aspxhome.com/file/2023/3/91993_0s.jpg)
在pytorch中计算准确率,召回率和F1值的操作
![](https://img.aspxhome.com/file/2023/8/76778_0s.png)
python编程线性回归代码示例
![](https://img.aspxhome.com/file/2023/2/95722_0s.png)
Django配置文件代码说明
![](https://img.aspxhome.com/file/2023/7/99017_0s.png)