阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单探索Python中的filter函数

59次阅读
没有评论

共计 1610 个字符,预计需要花费 5 分钟才能阅读完成。

导读 本文和你一起来探索 Python 中的 filter 函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效

任何事情都是由量变到质变的过程,学习 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 对象或迭代器。接下来看下用 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 得到的结果是正确的。

到此这篇关于 Python 简明讲解 filter 函数的用法的文章就介绍到这了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1610字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中