程式扎記: [ Python 文章收集 ] python內置函數 map/reduce/filter

標籤

2012年12月19日 星期三

[ Python 文章收集 ] python內置函數 map/reduce/filter

來源自 這裡 
Preface: 
python有幾個內置的函數很有意思: map/filter/reduce,都是對一個集合進行處理,filter很容易理解用於過濾,map用於映射,reduce用于歸並. 是python列表方法的三架馬車. 

filter(bool_funciterable) 函數: 
filter函數的功能相當於過濾器。調用一個布林函數 bool_func 來迭代遍歷每個seq中的元素;返回一個使 iterable 內所有元素返回值為 true 的 元素的序列: 
>>>a=[1,2,3,4,5,6,7]
>>>b=filter(lambda x:x>5, a)
>>>b
[6,7] #返回大於5的元素集合

如果 bool_func 參數值為None,就使用 identity() 函數,list 參數中所有為 False 的元素都將被刪除. 如下所示: 
>>> a = [0, 1, 2, False, [], 4, '']
>>> b = filter(None, a)
>>> b
[1, 2, 4] # 空陣列, 空字串, 0, False 都被 identity() 函數視為 False

map(funciterable, ...) 函數: 
map 函數 func 作用於給定序列的每個元素進行 mapping/操作 並將 mapping/操作 後的元素以列表形式返回: 
>>> a = [1, 2, 3, 4, 5]
>>> b = map(lambda x:x+3, a)
>>> b
[4, 5, 6, 7, 8] # 將 a 中每個元素都加上3

reduce(funciterable[, initializer]) 函數: 
reduce 函數,func 為二元函數 (接收兩個參數, 第一個為上一次操作結果, 另一個為序列的下一個元素),將 func 作用於 iterable 序列的元素,每次攜帶一對, 連續的將現有的結果和下一個值作用在獲得的隨後的結果上, 最後減少我 們的序列為一個單一的返回值: 
>>> a = [1, 2, 3, 4, 5]
>>> reduce(lambda x,y:x+y, a)
15 # 計算 ((((1+2)+3)+4)+5)

在有給定參數 initializer 時 (且不是 None), initializer 將會被視為第一個作用後的元素. 也就是將 initializer 放在 iterable 最前面的元素. 當 iterable 為空時, initializer 則被返回 (等同initializer=None, 而 iterable 中只有一個元素時, 該元素被返回). 

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!