前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python基础】内置函数filter详解

【Python基础】内置函数filter详解

原创
作者头像
superhua
发布2022-04-03 11:03:11
4680
发布2022-04-03 11:03:11
举报
文章被收录于专栏:CNNCNN

filter,顾名思义,就是一个过滤器。其作用是从列表(或其他序列类型)中筛选出满足条件的子列表,filterpython的内置函数,无须import即可直接使用。

1 filter的基础用法

对于列表(或其他序列类型),如果希望从中筛选出满足某个约束条件的子列表,我们一般的做法是使用一个for循环遍历每个元素然后执行相同约束条件判断,将满足条件的放入新的子列表中。例如,从列表中找出所有偶数子列表,并按对应的先后顺序放入子列表中:

代码语言:python
代码运行次数:0
复制
a = [1, 2, 3, 4, 5]
b  = []
for i in a:
    if i % 2 == 0:
        b.append(i)

那么如果使用filter的话,使用filter函数使得代码变得更简洁:

代码语言:python
代码运行次数:0
复制
a = [1, 2, 3, 4, 5]
def check(i): return i % 2 == 0
b = list(filter(check, a))

2 filter与for循环性能对比

前面在讲map时,我们知道map函数除了能让代码更优雅以外,使用map比使用for循环速度更快。同样的,使用filter远比使用for循环快。我们做个实验,从长为100000的列表中,查找偶数对比耗时:

代码语言:python
代码运行次数:0
复制
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)

输出结果如下:

代码语言:python
代码运行次数:0
复制
for循环耗时: 0.015271199999999999
filter耗时: 1.4000000000000123e-05

从输出结果可以看到:

十万级别数据上,filter的速度大约是for循环的1000倍。

当然了,具体的速度对比方面跟具体的硬件有关,一般而言,如果本地机器硬件配置越高,那么这个倍数越高。所以,平时写代码时,可以稍微注意一下,是否可以使用更高效的替代方案。

如果您觉得本文对你有帮助,欢迎关注我【Python学习实战】,第一时间获取最新更新。每天学习一点点,每天进步一点点。

关注【Python学习实战】
关注【Python学习实战】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 filter的基础用法
  • 2 filter与for循环性能对比
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档