Python 的内置函数 filter

作者:IMPYLH日期:2025/11/1

Python 内建函数列表 > Python 的内置函数 eval

Python 的内建函数 filter() 是一个非常有用的高阶函数,它用于对可迭代对象进行筛选过滤。它的基本工作原理是根据指定的函数条件,从输入的可迭代对象中筛选出符合条件的元素,返回一个迭代器对象。

1def filter(fn, iterable):
2    '''
3    过滤数据
4
5    :param fn: 回调函数,返回 True 是元素保留,返回 False 时元素去除
6    :param iterable: 要过滤的可迭代对象
7    :return: 过滤后的可迭代对象
8    '''
9

详细说明

filter() 函数的语法格式为:

1filter(function, iterable)
2

其中:

  • function 是筛选条件函数,当该参数为 None 时,filter() 会自动过滤掉可迭代对象中值为 False 的元素
  • iterable 是待处理的可迭代对象,如列表、元组等

工作原理

filter() 会遍历 iterable 中的每个元素,并调用 function 函数进行测试:

  1. 对于每个元素 x,计算 function(x)
  2. 如果返回值为 True,则保留该元素
  3. 如果返回值为 False,则过滤掉该元素

最终返回一个包含所有保留元素的迭代器对象。如果需要列表形式的结果,可以使用 list() 进行转换。

示例应用

示例1:过滤奇数
1numbers = [1, 2, 3, 4, 5, 6]
2even_numbers = filter(lambda x: x % 2 == 0, numbers)
3print(list(even_numbers))  # 输出:[2, 4, 6]
4
示例2:过滤空字符串
1strings = ["hello", "", "world", "", "python"]
2non_empty = filter(None, strings)
3print(list(non_empty))  # 输出:['hello', 'world', 'python']
4
示例3:使用自定义函数过滤
1def is_positive(num):
2    return num > 0
3
4numbers = [-5, -3, 0, 2, 4]
5positives = filter(is_positive, numbers)
6print(list(positives))  # 输出:[2, 4]
7

注意事项

  1. filter() 返回的是迭代器而不是列表,如果需要列表必须显式转换
  2. 与列表推导式相比,filter() 在可读性上有时不如列表推导式清晰
  3. 当过滤条件简单时,使用 filter() 结合 lambda 会更简洁
  4. 在 Python 3 中,filter() 返回的是过滤器对象,而在 Python 2 中返回的是列表

性能考虑

filter() 的执行效率与列表推导式相当,但对于大型数据集,filter() 可能更节省内存,因为它返回的是迭代器而不是完整的列表。在处理大数据集时,如果需要节省内存,filter() 是更好的选择。

filter() 函数常与其他函数式编程工具如 map()reduce() 配合使用,可以构建出简洁高效的数据处理管道。这种组合方式遵循"数据转换流水线"的设计模式,每个函数专注于完成一个特定的数据处理任务:

  1. filter() 负责数据筛选
    • 示例:从列表中筛选出偶数
1numbers = [1, 2, 3, 4, 5, 6]  
2even_numbers = filter(lambda x: x % 2 == 0, numbers)  
  1. map() 负责数据转换
    • 接上例,将筛选出的偶数平方
1squared_evens = map(lambda x: x**2, even_numbers)  
  1. reduce() 负责数据聚合
    • 最后计算平方后的偶数和
1from functools import reduce  
2sum_squared = reduce(lambda x, y: x + y, squared_evens)  

典型应用场景包括:

  • 数据清洗流程:先过滤无效数据,再转换格式,最后汇总统计
  • 日志分析:筛选特定级别的日志,提取关键信息,计算指标
  • 电商数据处理:过滤已下架商品,转换价格格式,计算总销售额

这种组合的优势在于:

  1. 代码可读性强,每个步骤意图明确
  2. 内存效率高,生成器特性避免中间数据存储
  3. 易于维护和扩展,可以灵活调整处理步骤顺序

Python 的内置函数 filter》 是转载文章,点击查看原文


相关推荐


彻底搞懂「字幕」:从格式、软硬到嵌入,告别所有困惑
mortimer2025/10/30

“我明明把字幕加上了,为什么播放时看不到?” “为什么别人的视频能切换中英文字幕,我的就不行?” “软字幕、硬字幕、.srt、.ass……这些到底是什么鬼?” 如果你曾被这些问题困扰,那么这篇文章就是为你准备的。我将用最清晰的逻辑和最易懂的语言,一次性讲透关于字幕的所有核心知识。 第一站:先懂最核心的区别 —— 软字幕 vs. 硬字幕 在讨论任何格式或工具之前,你必须先理解字幕最终呈现的两种形态。这决定了你的字幕能否被关闭或切换。 硬字幕 (Hard Subs):印在画面上的“纹身” 硬字幕


Redis(87)Redis缓存的LRU淘汰策略如何配置?
Victor3562025/10/27

配置Redis缓存的LRU(Least Recently Used,最近最少使用)淘汰策略需要以下几个步骤: 设置最大内存限制 选择和配置淘汰策略 验证配置 以下是详细的步骤和代码示例。 1. 设置最大内存限制 可以在Redis配置文件 redis.conf 中设置 maxmemory 选项来限制Redis使用的最大内存。 # redis.conf # 设置最大内存为256MB maxmemory 256mb 如果你不使用配置文件,可以通过命令行参数直接设置: redis-server -


Redis(80)如何解决Redis的缓存穿透问题?
Victor3562025/10/24

解决Redis缓存穿透问题的方法有多种,具体的解决方案可以根据实际情况选择。以下是几种常见的解决方法及详细的代码示例,包括缓存空结果、使用布隆过滤器以及参数校验。 1. 缓存空结果 当查询数据库返回空结果时,也将其缓存起来,并设置一个较短的过期时间,比如5分钟。这样即使请求数据不存在,也不需要每次都访问数据库。 示例代码: import redis.clients.jedis.Jedis; import com.fasterxml.jackson.databind.ObjectMapper;


零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
阿里云云原生2025/10/22

作者:张铭辉(希铭) 本文部分总结于 8 月的 LoongSuite 系列公开课及 AI 原生应用实战营 meetup 分享内容。如需查看原视频欢迎移步:developer.aliyun.com/live/255218… 前言:AI Agent 从 Demo 到生产阶段的挑战 自 2022 年底 GPT-3.5 引爆大模型革命以来,AI 应用经历了从技术探索到产业落地的快速演进。开源模型迭代与低代码平台的兴起,推动了 AI Agent 开发效率的显著提升。然而,行业普遍面临一个核心矛盾:绝大多数


DeepSeek OCR:用'眼睛'阅读长文本,AI记忆新纪元?
墨风如雪2025/10/21

嘿,AI圈的朋友们!最近DeepSeek团队又搞了个大动作,发布了一款名叫DeepSeek-OCR的开源模型。但你可别以为这只是一个普通的文字识别工具,它的核心理念简直是脑洞大开,可能会彻底改变我们处理长文本的方式。 想象一下,我们的大语言模型(LLM)在面对海量文本时,常常会因为算力消耗过大而头疼不已,上下文一长,计算量就呈平方级增长。DeepSeek-OCR另辟蹊径,它不直接处理文本,而是巧妙地把文本信息“画”成图像,然后对这些图像进行压缩!是不是有点像人类先看图再理解,而不是一个字一个字地


如何从 iPhone 中导出视频
Digitally2025/10/20

如果你的 iPhone 存储空间不足,或者你想在发布到社交媒体之前编辑视频,你可以将视频从 iPhone 转移到电脑上,以释放更多空间。在 Windows 电脑上,通常使用 iTunes 在电脑和 iPhone 之间传输文件。在 Mac 上,如果你使用的是 macOS Mojave 或更早版本,可以使用 iTunes;如果你使用的是 macOS Catalina 或更高版本,则可以使用 Finder。在本文中,我们将向你展示多种从 iPhone 中导出视频的方法。有些方法需要使用 iTunes,


Pinia 状态管理原理与实战全解析
90后晨仔2025/10/19

一、前言:为什么选择 Pinia? 在 Vue2 时代,我们常用 Vuex 来做全局状态管理。 但是 Vue3 带来了全新的响应式系统(Composition API + Proxy),于是 Vue 官方团队推出了 Pinia —— 一款更轻量、更现代、更易用的状态管理库。 Pinia 的核心理念是: “让状态管理像使用普通变量一样简单。” 相比 Vuex,它具备以下优势: 特点VuexPinia语法基于 Mutation


图解AI核心技术:大模型、RAG、智能体、MCP
京东云开发者2025/10/17

简介 本文整理了来自Daily Dose of Data Science最热门或最新的文章,其中极具特色的动图以生动形象的方式,帮助我们更好的理解AI中的一些核心技术,希望能够帮助大家更好的理解和使用AI。 大模型 Transformer vs. Mixture of Experts 混合专家 (MoE) 是一种流行的架构,它使用不同的“专家”来改进 Transformer 模型。 下图解释了它们与 Transformers 的区别。 Transformer 使用前馈网络。 MoE 使用专家


一次慢接口背后,竟藏着40+种可能!你中过几个
uzong2025/10/16

从客户端到数据库的全链路性能瓶颈系统性排查指南 本文系统梳理了导致接口响应缓慢的40余种潜在原因,涵盖网络、网关、JVM、数据库、中间件等多个层面,旨在帮助开发者建立完整的性能问题排查思维模型,适用于线上故障定位与技术面试准备 作者:面汤放盐(公众号) || uzong 时间:2025-10-15 转载请备注声明 为什么会问这个问题 问题:现在生产上有一个慢接口,请分析一下这个慢接口,可能是系统中哪些环节导致的,大致原因是什么,可以是一些很细的案例,系统性的分析一下,越多越好,注意仅从理论


本地搭建 Jekyll 环境
爪娃侠2025/10/15

1、安装依赖 Windows:安装RubyInstaller(勾选「Add Ruby to PATH」)Mac:自带 Ruby,需更新 gem:sudo gem update --systemLinux:sudo apt-get install ruby-full 我个人Mac电脑安装时出现版本报错: 原因: macOS 系统自带的 Ruby 版本过低(当前是 2.6.10),而新版rubygems-update要求 Ruby 版本≥3.2.0,导致直接更新失败。 解决:用Ruby 版本管理工具

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0