当前位置: 首页 > news >正文

案例学Python:filter()函数的用法,高级!

大家好,这里是程序员晚枫,又来分享有用的Python知识了。

Python之所以好用,是因为有大量用于科学计算的内置函数和第三方库。用好这些第三方库,可以显著提高我们编程的速度和质量。

今天我们一起来看一下Python中一个重要的内置函数:filter

filter() 是 Python 中的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。filter() 函数接收两个参数,一个是函数,一个是序列。序列的每个元素作为参数传递给函数进行判定,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

1、简单用法

先说明一下需求,我们现在需要从0-10中筛选出所有的偶数,如果没有filter函数,我们的代码会像下面这么写。


# 创建一个包含奇数和偶数的列表
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 创建一个存放结果的列表
res_numbers = []for n in numbers:if n%2==0:res_numbers.append(n)print(res_numbers)

而如果我们使用filter函数,代码可以这么写,👇

# 定义一个过滤函数,用于判断一个数是否为偶数  
def is_even(n):return n % 2 == 0# 创建一个包含奇数和偶数的列表  
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 使用 filter() 函数过滤出偶数  
res_numbers = filter(is_even, numbers)# 使用 list() 将结果转换为列表  
result = list(res_numbers)
print(result)  # 输出: [0, 2, 4, 6, 8, 10]

在这个例子中,filter() 函数接收了两个参数:一个是我们定义的 is_even 函数,用于判断一个数是否为偶数;另一个是 numbers 列表,我们希望从中筛选出偶数。filter() 函数将 is_even 函数应用到 numbers 中的每一个元素,然后返回一个迭代器,其中包含所有使 is_even 返回 True 的元素。最后,我们使用 list() 函数将这个迭代器转换为列表。

2、复杂用法

还是上面这个例子,细心的同学可能发现,用了filter函数,代码变得更加冗长了。

难道是filter不好用吗?

是因为我们没用上filter的精髓:filter可以结合lambda表达式,进行更加高效的筛选。如下面的代码所示。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(res_numbers)

在这个代码中,我们只用了1行代码,就实现了偶数的筛选,而其中的筛选条件就来自lambda表达式。

在实际的编程工作中,很多筛选条件,都不值得用几行代码去表达,非常的浪费时间。

而使用filter这种内置函数 + lambda表达式的方式,就可以很简洁的解决这种无聊的代码过多的问题。


你学会了吗?使用过程中有任何问题,欢迎在评论区交流~

相关文章:

  • Java 并发性和多线程3
  • Leetcode刷题(二十四)
  • Android SDK环境搭建[图解]; 解决问题Done. Nothing was installed.
  • C++ namespace高级用法
  • Python Matplotlib 动画教程:提高可视化吸引力的强大工具【第24篇—python:Matplotlib】
  • 【设计模式-02】Strategy策略模式及应用场景
  • node(express.js创建项目)+连接mysql数据库
  • 鸿蒙Harmony-线性布局(Row/Column)详解
  • 静态路由、代理ARP
  • 自动化创建ETX用户帐号
  • freesurfer-reconall后批量提取TIV(颅内总体积)
  • 【Effective Objective - C】—— 熟悉Objective-C
  • 安泰电子前置微小信号放大器怎么用的
  • 水浒传之Screen的传奇-Linux/FreeBSD终端下的多窗口复用
  • 生成式 AI 如何重塑开发流程和开发工具?
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【Amaple教程】5. 插件
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 345-反转字符串中的元音字母
  • angular2开源库收集
  • Angular6错误 Service: No provider for Renderer2
  • centos安装java运行环境jdk+tomcat
  • export和import的用法总结
  • Fastjson的基本使用方法大全
  • Git学习与使用心得(1)—— 初始化
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Rancher-k8s加速安装文档
  • Sass 快速入门教程
  • SOFAMosn配置模型
  • Vue.js-Day01
  • 包装类对象
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 简单易用的leetcode开发测试工具(npm)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 漂亮刷新控件-iOS
  • 软件开发学习的5大技巧,你知道吗?
  • 实习面试笔记
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • - 转 Ext2.0 form使用实例
  • 阿里云API、SDK和CLI应用实践方案
  • ​Java基础复习笔记 第16章:网络编程
  • !$boo在php中什么意思,php前戏
  • ###项目技术发展史
  • #职场发展#其他
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (八)Flask之app.route装饰器函数的参数
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (实战篇)如何缓存数据
  • (一)WLAN定义和基本架构转
  • (转)Linux下编译安装log4cxx
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Reactor简单使用教程