• 一文让你彻底掌握【Python中的filter函数】


    任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。
      
    本文和你一起来探索Python中的filter函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
      
    在这里插入图片描述
      
      

    一、filter函数的定义

      
    filter函数是Python中常用的内置函数,调用无需加载库,直接使用即可。它主要用来根据特定条件过滤迭代器中不符合条件的元素,返回一个惰性计算的filter对象或迭代器。需要用list函数进行转换,才能得到符合的条件元素组成的新列表。
      
    其基本调用语法如下:

    filter(function or None, iterable)
    
    • 1

    function:函数,作用是对iterable中的每个元素判断是否符合特定条件。
      
    None:不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素。
      
    iterables:可迭代对象(序列、字典等)。

      
      

    二、filter函数实例

      

    例1:求一个序列中大于零的元素组成的新序列

      
    我们先来看下filter函数不加list的结果,代码如下:

    c = [-10, 28, 9, -5, 30, 5]
    filter(lambda a:a>0, c)
    
    • 1
    • 2

    得到结果:

    <filter at 0x27950dbb9d0>
    
    • 1

    返回一个惰性计算的filter对象或迭代器。接下来看下用list函数进行转换会得到什么,代码如下:

    c = [-10, 28, 9, -5, 30, 5]
    list(filter(lambda a:a>0, c))
    
    • 1
    • 2

    得到结果:

    [28, 9, 30, 5]
    
    • 1

    从结果知,filter函数的作用是挑选出了序列c中大于0的元素组成了新的对象或迭代器。通过list函数进行转换,进而得到符合条件的元素组成的新列表。如果有朋友对代码中的lambda函数不熟悉,可以参考【Python常用函数】一文让你彻底掌握Python中的lambda函数。

      

    例2:求序列中非零数组成的新序列

      
    在filter函数定义中提到,filter函数中参数None表示不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素。
      
    测试代码如下:

    #找出序列中的非0数
    c2 = [4, 9, 0, -5, -8, 7, 0]
    list(filter(None, c2))
    
    • 1
    • 2
    • 3

    得到结果:

    [4, 9, -5, -8, 7]
    
    • 1

    由于0在Python中默认为False,非0默认为True,所以在筛选过程中对0进行了过滤。

      

    例3:求字典中大于2的键组成的新序列

      
    在filter函数定义中提到,它对可迭代对象进行处理,所以包括了列表和字典等对象。前两个例题都是对列表进行处理,本例看下对字典的处理。代码如下:

    #找出字典中大于2的键
    list(filter(lambda x:x>2, {1:'杨紫', 2:'刘诗雯', 3:'张继科', 4:'王明', 5:'刘明'}))
    
    • 1
    • 2

    得到结果:

    [3, 4, 5]
    
    • 1

    从结果知,filter函数对字典进行处理的时候,筛选的对象是字典的键,而不是字典的值。

      

    例4:求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)))
    
    • 1
    • 2
    • 3

    得到结果:

    [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
    
    • 1

    其中np.arange(1, 101))表示1到100公差为1的等差数列。
      
    x%2!=0表示该数不能整除2,即为奇数。
      
    x%3==0表示该数能整除3,即为3的倍数。
      
    可以人工复核一下,发现Python得到的结果是正确的。
      
    至此,Python中的filter函数已讲解完毕,如想了解更多Python中的函数,可以到 “阿黎逸阳的代码” 公众号中“学习Python”模块相关文章。

      
    你可能感兴趣:
    用Python绘制皮卡丘
    用Python绘制词云图
    用Python绘制520永恒心动
    Python人脸识别—我的眼里只有你
    Python画好看的星空图(唯美的背景)
    【Python】情人节表白烟花(带声音和文字)
    用Python中的py2neo库操作neo4j,搭建关联图谱
    Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)

    长按(扫一扫)识别上方二维码学习更多Python和建模知识,让你的学习和工作更出彩。
  • 相关阅读:
    知识点4--CMS项目首页登录注册
    基于ISO14229协议的单帧以及多帧Can发送代码
    Python-Flask入门,静态文件、页面跳转、错误信息、动态网页模板
    Kubernetes控制平面组件:Kubelet
    Vue中如何实现动态改变字体大小
    Softing新版HART多路复用器现支持图尔克excom和西门子ET 200iSP等远程I/O
    Java面试八股之线程池中submit和execute方法的区别
    【Linux学习】- 线程同步 线程互斥量 线程信号量 操作
    微服务技术栈之rabbitMQ高级(二)
    Go的error接口
  • 原文地址:https://blog.csdn.net/qq_32532663/article/details/125460944