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.pswp.cn/web/94403.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BERT(Bidirectional Encoder Representations from Transformers)模型详解

一、BERT 简介BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言表示模型。它基于 Transformer 编码器结构,首次提出了 双向上下文建模 的方法,大幅度提升了自然语言处理…

【开题答辩全过程】以 基于Springboot+微信小程序的网上家教预约系统的设计与实现-开题为例,包含答辩的问题和答案

个人简介:一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧…

课小悦系列智能耳机上市,用硬核科技为教育赋能

在人工智能与教育深度融合的浪潮中,深圳课小悦科技有限公司以“智慧教育专家”的姿态崭露头角。这家深耕智能教育硬件的创新企业,于2025年8月正式推出革命性产品H360PRO系列教考耳机,为语言学习场景提供颠覆性解决方案。创新基因:…

[react] class Component and function Component

我对react的用法理解还一直停留在多年以前,说明这段时间我没有更新react的知识。我大脑中记得还是使用Class Component this.setState,可是今天看了看react的文档,发现怎么不一样了,用的都是function useState的方式了。你知道这…

以太坊智能合约地址派生方式:EOA、CREATE 和 CREATE2

1. 引言 在以太坊上,智能合约可以通过以下三种方式之一进行部署: 1)由外部账户(Externally Owned Account, EOA)发起交易,其中 to 字段设为 null,而 data 字段包含合约的初始化代码。2&#x…

基于RISC-V架构的国产MCU在eVTOL领域的应用研究与挑战分析

摘要电动垂直起降飞行器(eVTOL)作为未来城市空中交通的重要组成部分,对嵌入式控制系统的性能、可靠性和安全性提出了极高的要求。RISC-V作为一种新兴的开源指令集架构,为国产微控制器(MCU)的研发和应用带来…

深度学习中的“集体智慧”:Dropout技术详解——不仅是防止过拟合,更是模型集成的革命

引言:从“过拟合”的噩梦说起 在训练深度学习模型时,我们最常遇到也最头疼的问题就是过拟合(Overfitting)。 想象一下,你是一位正在备考的学生: 欠拟合:你根本没学进去,所有题都做错…

在JavaScript中,比较两个数组是否有相同元素(交集)的常用方法

方法1:使用 some() includes()(适合小数组)function haveCommonElements(arr1, arr2) {return arr1.some(item > arr2.includes(item)); }// 使用示例 const arrA [1, 2, 3]; const arrB [3, 4, 5]; console.log(haveCommonElements(ar…

心路历程-Linux的系统破解详细解说

CentOS7系统密码破解 密码破解是分两种情况的;一种是在系统的界面内,一种就是不在系统的页面; 今天我们就来聊聊这个系统破解的话题; 1.为什么需要破解密码?–>那当然是忘记了密码;需从新设置密码 2.但是…

IDE和AHCI硬盘模式有什么区别

IDE(Integrated Drive Electronics)和 AHCI(Advanced Host Controller Interface)是硬盘控制器的工作模式,主要区别在于性能、功能兼容性以及对现代存储设备的支持程度。以下是详细对比和分析:一、本质区别…

【密码学实战】密码实现安全测试基础篇 . KAT(已知答案测试)技术解析与实践

KAT 测试技术解析 在密码算法的安全性验证体系中,Known Answer Test(KAT,已知答案测试)是一项基础且关键的技术。它通过 “已知输入 - 预期输出” 的确定性验证逻辑,为密码算法实现的正确性、合规性提供核心保障&…

如何用Redis作为消息队列

说明:以前背八股文,早就知道 Redis 可以作为消息队列,本文介绍如何实现用 Redis 作为消息队列。 介绍 这里直接介绍 yudao 框架中的实现。yudao 是一套现成的开源系统框架,里面集成了许多基础功能,我们可以在这基础上…

解决 uniapp 修改index.html文件不生效的问题

业务场景:需要在H5网站设置追踪用户行为(即埋点)的script代码。 问题:无论如何修改根目录下的index.html文件都不会生效 问题原因:在 manifest.json 文件中有个【web配置】—>【index.html模版路径】,…

C语言第十一章内存在数据中的存储

一.整数在内存中的存储在计算机内存中,所有的数字都是以二进制来存储的。整数也不例外,在计算机内存中,整数往往以补码的形式来存储数据。这是为什么呢?在早期计算机表示整数时,最高位为符号位。但是0却有两种表示形式…

K8s部署dashboard平台和基本使用

Kubernetes 的默认 Dashboard 主要用于基本的资源查看与管理,如查看 Pod、Service 等资源的状态,进行简单的创建、删除操作 。然而,在企业级复杂场景下,其功能显得较为局限。 与之相比,开源的 Kubernetes Dashboard 增强版工具 ——Dashboard UI ,为用户带来了更强大的功…

JavaEE进阶-文件操作与IO流核心指南

文章目录JavaEE进阶文件操作与IO流核心指南前言:为什么需要文件操作?一、java.io.File 类的基本用法1.1 文件路径1.2 常用方法示例获取文件信息创建和删除文件目录操作文件重命名和移动二、IO流的基本概念2.1 核心困境:字节流 vs. 字符流字节…

动手学深度学习03-线性神经网络

动手学深度学习pytorch 参考地址:https://zh.d2l.ai/ 文章目录动手学深度学习pytorch1-第03章-线性神经网络1. 线性回归1.1 什么是线性回归?1.2 如何表示线性回归的预测公式?2. 损失函数2.1 什么是损失函数?2.2 如何表示整个训练集…

如何安全解密受限制的PDF文件

当你需要从PDF中复制一段文字用于报告或引用时,如果文件被禁止复制,解密后即可轻松提取内容,避免手动输入的麻烦。它解压后双击主程序即可运行,无需安装,即开即用,十分便捷。建议先将界面语言切换为中文&am…

利用DeepSeek辅助编译c#项目tinyxlsx生成xlsx文件

继续在寻找比较快的xlsx写入库,从https://github.com/TinyXlsx/TinyXlsx/ 看到它的测试结果,比c的openXLSX快几倍,就想试用一下,仔细一看,它是个c#项目,需要.NET 8.0。 于是上微软网站下载了.NET 8.0 SDK&a…

构建现代高并发服务器:从内核机制到架构实践

引言:高并发的挑战与演进 在当今互联网时代,高并发处理能力已成为服务器的核心竞争力。传统的"一个连接一个线程"(Thread-per-Connection)模型由于资源消耗巨大、上下文切换成本高和可扩展性差,早已无法应对数万甚至百万级的并发连接需求。现代高并发服务器基于…