Last Updated on 2021-06-21 by Clay
今天在回答一位朋友的問題時,突然間看到朋友的程式碼中出現了 “filter()” 這個函式,並且被他詢問了為什麼那行程式碼為什麼不能跑。
這真的是一個尷尬的問題:我開始學習著使用 Python 寫程式兩年了,但是我從來沒有使用過 “filter()” 這個函式!
當然,沒有誰是全知全能的,所以不知道一個 “filter()” 函數也是很正常的!而且我也好好地使用 Python 寫程式度過了兩年 XDD
不過,遇到不懂的事情,就盡量把它弄懂,這是我很喜歡做的事情。只要持之以恆,我也能成為像各個了不起的前輩那樣,使用自身的知識幫助他人的人吧!
那麼,就來紀錄在 Python 中, “filter()” 這個函式到底是怎麼運作的吧!
filter() 的使用方法
其實說穿了,filter() 所做的事情非常單純,只需要輸入兩個參數:
filter("函式", "輸入函式的可迭代物件")
然後 filter() 就會回傳一個 filter 物件,是一個可迭代的物件,物件內的元素則為輸入函式後返回 True 的元素。
我知道這樣講相當難理解;等到過了幾個月,我自己回來大概也會看不懂。所以我們直接看一個實際例子:
# Inputs inputs = [ 'a', 'bb', 'ccc', 'dddd', 'eeeee', ] # Function def bigger_than_three(string): return True if len(string) > 3 else False # Filter result = filter(bigger_than_three, inputs) print(result) print(list(result))
Output:
<filter object at 0x7f0f92d34860>
['dddd', 'eeeee']
首先我定義了我們輸入的參數 inputs,其中有著不同長度的字串。然後,我定義了一個 “bigger_than_three()” 的函式,在輸入字串長度大於 3 的時候回傳 True、不大於 3 的時候回傳 False。
然後,我們分別將函式和輸入都放入 filter() 函式中,回傳的結果會如同第一次印出的程式一般,印出 “filter” 的資料型態。我們需要加上 list() 才能將其轉換成我們看得懂的 List 資料型態。
可以看到,filter() 返回的結果只有長度大於 3 的字串,這就是 filter() 函式的功用。
References
- https://www.programiz.com/python-programming/methods/built-in/filter
- https://www.learnpython.org/en/Map,_Filter,_Reduce
- https://book.pythontips.com/en/latest/map_filter.html