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
英文地址,請注明出處:http://en.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)模型由于資源消耗巨大、上下文切換成本高和可擴展性差,早已無法應對數萬甚至百萬級的并發連接需求。現代高并發服務器基于…