filter
,顾名思义,就是一个过滤器。其作用是从列表(或其他序列类型)中筛选出满足条件的子列表,filter
是python
的内置函数,无须import
即可直接使用。
对于列表(或其他序列类型),如果希望从中筛选出满足某个约束条件的子列表,我们一般的做法是使用一个for
循环遍历每个元素然后执行相同约束条件判断,将满足条件的放入新的子列表中。例如,从列表中找出所有偶数子列表,并按对应的先后顺序放入子列表中:
a = [1, 2, 3, 4, 5]
b = []
for i in a:
if i % 2 == 0:
b.append(i)
那么如果使用filter
的话,使用filter
函数使得代码变得更简洁:
a = [1, 2, 3, 4, 5]
def check(i): return i % 2 == 0
b = list(filter(check, a))
前面在讲map
时,我们知道map
函数除了能让代码更优雅以外,使用map
比使用for
循环速度更快。同样的,使用filter
远比使用for
循环快。我们做个实验,从长为100000
的列表中,查找偶数对比耗时:
import time
def test_for(length):
sub_list = []
begin = time.perf_counter()
for i in range(length):
if i % 2 == 0:
sub_list.append(i)
end = time.perf_counter()
print('for循环耗时:', (end - begin))
def test_filter(length):
def check(i):
return i % 2 == 0
begin = time.perf_counter()
sub_list = filter(check, range(length))
end = time.perf_counter()
print('filter耗时:', (end - begin))
test_for(100000)
test_filter(100000)
输出结果如下:
for循环耗时: 0.015271199999999999
filter耗时: 1.4000000000000123e-05
从输出结果可以看到:
在
十万
级别数据上,filter
的速度大约是for
循环的1000
倍。
当然了,具体的速度对比方面跟具体的硬件有关,一般而言,如果本地机器硬件配置越高,那么这个倍数越高。所以,平时写代码时,可以稍微注意一下,是否可以使用更高效的替代方案。
如果您觉得本文对你有帮助,欢迎关注我【Python学习实战】,第一时间获取最新更新。每天学习一点点,每天进步一点点。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有