如何在Python中使用filter()函數
了解如何使用 Python 的 filter() 函數從集合中提取元素。將過濾器與列表推導式和 lambda 回調進行比較。
概述
資料過濾是應用程式程式設計的核心任務。您經常需要搜尋清單並提取滿足特定條件的元素,例如從設定檔資料庫中提取活躍用戶,或從感測器日誌中過濾掉負數。為此,Python 提供了一個名為「filter()」的內建函數工具。
`filter(function, iterable)` 函數接受一個濾波函數和一個可迭代物件作為參數。函數參數必須為每個元素傳回一個布林值(“True”或“False”)。 「filter()」函數計算每個元素,僅保留那些計算結果為「True」的元素,並傳回包含結果的迭代器物件(「filter」物件)。
與“map()”一樣,“filter()”延遲計算元素。如果您立即需要一個標準列表,可以使用「list()」建構子轉換輸出:「list(filter(func, data))」。如果你傳遞 `None` 作為函數參數(例如,`filter(None, data)`),Python 將自動過濾掉所有虛假元素,這是清除空值的一個很好的速記方式。
程式碼和執行輸出
這個腳本示範如何使用filter()過濾數值數組、提取字典項目以及丟棄虛假的空字串。
filter_function.py
在編輯器中嘗試numbers = [-5, -2, 0, 3, 8, -1]
# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)
# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)
# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)端子輸出
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']逐步實施
- 定義一個接受元素並傳回表示過濾條件的布林值的函數。
- 呼叫 filter(function, iterable) 以建立符合的惰性迭代器。
- 如果需要操作記錄,請使用 list(filter(...)) 將產生的篩選器物件轉換為清單。
- 傳遞 None 作為函數參數以過濾掉所有虛假值(例如 None、0 和空字串)。
常見問題解答
如果傳遞給 filter() 的函數不傳回布林值會發生什麼事?
Python 評估傳回值的真實性。如果該值在布林上下文中計算結果為 True,則保留該元素。
我應該使用 filter() 還是列表理解?
出於可讀性考慮,帶有 if 條件的列表理解(例如,[x for x in list if condition])通常是首選,但 filter() 乾淨且高效能,尤其是在使用現有內建函數時。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。