Python filter函式筆記(一)

2021-09-25 13:39:32 字數 2285 閱讀 8492

在雪峰前輩的filter教程中是如此介紹filter函式的:

filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。

詳細來說是這個樣子:

#具有篩選功能、可返回true和false的函式

def not_empty(s):

return s and s.strip()

#待篩選的序列

array = ['a','','b',none,'c',' ']

#filter(函式 , 序列)

list(filter(not_empty,array))

filter會將序列中的每乙個元素傳入函式中進行計算,若函式計算某一元素後返回了true,那麼這個元素就會得以保留,反之函式計算得到了false,那這個元素就會被篩除掉。最終filter將返回乙個所有保留元素組成的iterator,需要用乙個list將filter函式的篩選結果接收:

l = list(filter(not_empty,array))
然後舉了乙個這樣的例子:

可以用以下函式將序列中的空字元刪除掉:

def not_empty(s):

return s and s.strip()

print(list(filter(not_empty,['a','','b',none,'c',' '])))

#輸出 ['a','b','c']

作為python的初學者其實這個函式還是有一點難以理解,為什麼這個函式能直接將""(空字串)、" "(只包含空格的字串)、none(none type物件)這三種字串給直接刪除掉呢?

其實這個函式包含了兩大知識點:

在python中非零數值、非空字串、非空list在判斷中為true,假設有如下的**:

#1 非空字串

if "a" :

print("true")

else:

print("flase")

if " ":

print("true")

else:

print("flase")

#2 非空list

if [1,2,3]:

print("true")

else:

print("flase")

#3 非零數值

if -1:

print("true")

else:

print("flase")

上述幾個例子無一例外會輸出true,而在如下**中則全部會輸出flase:

#1 空字串

if "" :

print("true")

else:

print("flase")

#2 空list

if :

print("true")

else:

print("flase")

#3 零數值

if 0:

print("true")

else:

print("flase")

#4 nony type 物件

if none:

print("true")

else:

print("flase")

那問題來了,既然s.strip()可以將僅包含空格的字串直接縮成空字串,為什麼我們還要寫成return s and s.strip()而不直接寫成return s.strip()呢?這就是第二點

其實這裡還有乙個小知識點,那就是and的運算規則,眾所周知and是個二目運算子,它的用法如下:

變數1 and 變數2

而and的屬性決定了只要兩個變數有乙個為false那結果一定就是false,因此只要當變數1為false,變數2就不會被計算。為什麼要說這個知識點呢,因為我們看到了array中我們傳入了乙個none type物件——none。而none.strip()是不合法的語句,它不具有這個屬性,因此如果我們只寫return s.strip()的話,當傳入了none就會報錯,而我們寫成了 s and s.strip(),這句話在判斷none的時候就變成了:

none and none.strip()
由於none等價於false,因此none.strip()就不會被執行,因此程式就不會報錯。

Python filter 函式的使用

描述 filter 函式用於過濾序列,過濾掉不符合條件的元素,返回乙個迭代器物件,如果要轉換為列表,可以使用 list 來轉換。該接收兩個引數,第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。語法 以下...

python filter到函式式程式設計

filter function,iterable 高階函式,可以用來過濾能迭代的物件。關鍵是可以定製自己的過濾函式。返回乙個迭代物件 python3.x import math def is sqr x return math.sqrt x 1 0 tmplist filter is sqr,ran...

Python filter函式的幾個例子

關於filter函式的語法介紹可參照 菜鳥教程filter函式 首先看一下菜鳥教程的例子 篩選奇數 defis odd n return n 2 1 filter返回的是乙個迭代器 tmplist filter is odd,1 2,3 4,5 6,7 8,9 10 newlist list tmp...