Filter函數
1. 函數的作用:
filter函數一般用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表.也就是列表解析,集合解析,字典解析中提及的過濾元素.
這裡順便說一點題外話,在那篇文章中忘了提及: 列表解析屬於語法糖,編譯器會自動對其優化,但是其簡潔性大大的提高了編程的高效性和可閱讀性.
2. 語法(使用方法)
我們可以先看一下Python3的AP是如何描述的:
filter(function, iterable)
Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.Note that filter(function, iterable) is equivalent to the generator expression (item for item in iterable if function(item)) if function is not None and (item for item in iterable if item) if function is None.
翻譯一下就是如下:
- filter接收兩個參數,第一個參數為一個函數(過濾元素的規則),第二個元素為需要過濾的序列(列表,字典,集合)
- function除了是普通的函數還可以是lambda表達式
- 返回值是迭代器對象(python2.7返回列表)
3. 實際效果:
# 構建一個隨機列表 lis = [randint(0,10) for _ in range(10)] print(lis) #輸出為[2, 9, 3, 5, 6, 9, 6, 10, 9, 5] # 使用filter函數進行賽選其中的奇數元素 g = filter(lambda x: x & 1 != 0,lis) print(g) # 輸出為 <filter object at 0x000001551904BA88> # 使用返回的迭代器生成列表 res = list(g) print(res) #輸出為[9, 3, 5, 9, 9, 5]
這裡就使用的是lambda表達式,因為這樣很簡潔,能夠實現大部分需求,不是lambda表達式也可以,如下:
lis = [randint(0,10) for _ in range(10)] print(lis) # [3, 3, 4, 8, 3, 4, 5, 1, 0, 0] # 判斷是否為奇數 def isOdd(x): return x & 1 res = list(filter(isOdd, lis)) print(res) #[3, 3, 3, 5, 1]
這裡我自己定義的函數寫得很簡單,你也可以將其寫得很複雜,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)