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

python中的filter函数

目录

定义与参数说明

特点

使用场景

常用操作

筛选偶数

去除空字符串

筛选正数

筛选字典

配合集合与元组

注意事项


 

定义与参数说明

filter函数是Python内置的高阶函数之一,用于筛选可迭代对象中的元素,根据返回值的布尔结果(True 或 False)决定是否保留该元素。

语法结构:

filter(function, iterable)

  • function:过滤函数,必须是一个可以接受单个参数并返回布尔值的函数。返回True→元素保留;返回False→元素丢弃;若传入None,则默认按元素本身的布尔值来判断,False的元素会被过滤掉。
  • iterable:可迭代对象,如list、tuple、set、dict、str等。
  • 返回值:返回一个filter对象(迭代器),需要通过list()、tuple()或set()转换才能看到完整结果。

特点

特点解释
高阶函数函数作为参数传递
惰性迭代不会一次性生成结果,而是迭代时才逐个判断
结果有序

对有序序列(list、tuple、str),保持原顺序

可与lambda结合简洁表达条件
返回子集最终结果是原集合的子集

使用场景

  • 筛选数据:保留满足某个条件的元素。
  • 数据清洗:去掉无效、空值、零值等数据。
  • 条件过滤:快速应用逻辑判断。
  • 结合其他函数:与map()、reduce() 等配合做复杂处理。

常用操作

筛选偶数

勇者召集了士兵,编号依次是 [1, 2, 3, 4, 5, 6]。他发现偶数编号的士兵能自然结成双人小队,配合更默契,而奇数编号总是落单。于是勇者只保留了偶数编号的士兵,形成整齐的战斗队列。

nums = [1, 2, 3, 4, 5, 6]
# filter()函数接收一个函数和一个序列作为参数,返回一个迭代器。
result = filter(lambda x: x % 2 == 0, nums)
print(f"筛选后的结果为:{list(result)}")

对代码进行运行测试:

去除空字符串

在村口,冒险者们报出名字:["阿尔", "", "塞琳", None, "托马斯"]。有些人声音太小,甚至没开口,勇者听不见,也不愿收留胆怯之人。他只记住了那些真正大声喊出自己名字的勇敢者。

words = ["阿尔", "", "塞琳", None, "托马斯"]
result = filter(None, words)
print(f'勇者记住的名字为:{list(result)}')

对代码进行运行测试:

筛选正数

荒野上,战士们的斗志值被记录为 [-3, -1, 0, 2, 5, -2, 7]。负数表示已经心灰意冷,0 代表犹豫不前,只有正数象征着仍怀有希望。勇者知道,这些人才能在困境中坚持战斗,于是只挑选出斗志大于 0 的战士。

numbers = [-3, -1, 0, 2, 5, -2, 7]
result = filter(lambda x: x > 0, numbers)
print(f"勇者挑选出的战士的斗志为:{list(result)}")

对代码进行运行测试:

筛选字典

远征需要补给,勇者走访各村,得到的粮食储备是:{"绿林村": 10, "石谷村": 0, "雾隐村": 20, "荒地村": -5}。他只会依靠那些有能力贡献的村庄,把没有粮食或负债的地方排除掉。

data = {"绿林村": 10, "石谷村": 0, "雾隐村": 20, "荒地村": -5}
result = filter(lambda k: data[k] > 0, data)
print(f"勇者筛选出的给力的村庄有:{list(result)}")

对代码进行运行测试:

配合集合与元组

战场上,勇者面对一群战士,他们的力量值是 {0, 1, 2, 3, 4, 5}。他只选择力量大于2的勇士加入远征队。同时,他还清点了宝物 (10, -1, 0, 8, 5),只留下真正有价值(≥5)的。

# 从集合中筛选力量强的战士
s = {0, 1, 2, 3, 4, 5}
result1 = filter(lambda x: x > 2, s)
print(f"筛选出的得力战士为:{set(result1)}")# 从元组中挑选价值不低的宝物
t = (10, -1, 0, 8, 5)
result2 = filter(lambda x: x >= 5, t)
print(f"筛选出的价值不低的宝物为:{tuple(result2)}")

对代码进行运行测试:

注意事项

  • 返回的是迭代器:需要用list()或tuple()等转换。
  • 只能遍历一次:迭代器消耗后不可复用。
  • function返回布尔值:若返回非布尔,会自动转为布尔值。
  • None的特殊用法:filter(None, iterable)会自动剔除布尔值为False的元素。
  • 列表推导式替代:小数据集时,[x for x in iterable if condition]更直观。
http://www.dtcms.com/a/348640.html

相关文章:

  • 学习做动画1.简易行走
  • 人工智能之数学基础:离散型随机变量
  • 源滚滚React消息通知框架v1.0.2使用教程
  • 管道符在渗透测试与网络安全中的全面应用指南
  • sim2real!so-arm100 机械臂 Mujoco 仿真与实机控制
  • HbuilderX下载与安装
  • python多线程操作,threading库详解(附实例演示)
  • No static resource报错
  • Linux 系统管理核心概念与常用命令速查
  • Baumer高防护相机如何通过Tiny-YOLO单类模型实现人体跌倒检测与跟踪(C#代码UI界面版)
  • [Windows] PDF-XChange Editor Plus官方便携版
  • 鸿蒙中点击完成时延分析
  • 通过python程序将实时监测数据写入excel软件进行保存是常用和非常实用的功能,本文教会大家怎么去搞定此功能
  • LangChain框架入门19: 构建你的第一个 AI 智能体
  • HTTP报文格式详解:从历史演进到现代Web的通信基石
  • Python-鸭子类型
  • DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法
  • 校园跑腿小程序源码 _ 跑腿便利店小程序 含搭建教程
  • 小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)
  • c++基础知识入门
  • 【AI智能体】Dify 搭建业务单据差异核对助手实战详解
  • kubernetes中的认证和授权
  • Python 变量 (variables)、对象 (objects) 和引用 (references)
  • 第1章:量子涟漪
  • 双网卡并行访问:解决有线局域网与无线互联网共存时的路由冲突问题
  • 淘宝pc端首页做了哪些性能优化?
  • 大型 C/C++ 项目中 AI 助手(Cursor / Claude Code)日常操作清单与发散思路
  • MYSQL-表的约束(下)
  • 数据建模怎么做?一文讲清数据建模全流程
  • 设备管理与策略