Skip to content

[Python] filter() 函式的使用方法

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


Read More

Tags:

Leave a Reply