就像 filter 這個名字所指的,fiter() 這個函數正是用來過濾元素用的。

Introduction

filter(function, iterable) 是根據什麼來過濾元素的呢?它以傳入的 boolean function 作為條件函式,iterate 所有 sequence 內的元素並收集篩選自 function 的元素到一個 List。

看一個例子:

1
2
3
4
def test(x):
return x > 10
a = [11, 2, 8, 22, 6, 4, 15]
filter(test, a) # [11, 22, 15]

這個例子透過 test() 來過濾 a 裡頭的元素,大於10的會被回傳,之後被 filter 收集成為一個 list。

再來另一個例子,把 lambda 加進來,過濾出小於 0 的元素:

1
filter((lambda x: x < 0), range(-5,5)) # [-5, -4, -3, -2, -1]

Implementation

map() 一樣,filter() 也可以用 for loop 來實作:

1
2
3
4
5
6
7
8
9
10
11
12
def myfilter(aFunc, aSeq):
res = []
for item in aSeq:
if aFunc(item):
res.append(item)
return res
def test(x):
if x <= 0: return False
return True
myfilter(test, range(-5,5)) # [-5, -4, -3, -2, -1]

以上,filter() 到此告一段落。

參考連結:http://www.bogotobogo.com/python/python_fncs_map_filter_reduce.php