python 中的filter, map, reduce方法解釋:
filter:
filter方法調用:
resultlst = filter(func, seq)
@param func: 可調用對象,接受seq中的元素作爲參數
@param seq: 可迭代對象,其中每個元素都要被傳入func執行一次;
filter的作用:
對seq可迭代序列或者對象的每一個元素調用一次func,如果func返回值爲True,則將該元素插入返回結果列表。反之,則丟棄;
例如:
a = [1,2,3,4,5]
result = filter(lambda x : x > 3, a)
則返回結果是:[4,5]
注意,filter的func可調用對象必須返回一個具有“bool屬性”的值。所謂具有bool屬性,即是指該返回值要能夠與bool真值進行比較。在python中,幾乎所有對象都能夠判斷真假。filter方法本身返回的是seq元素的列表子集。並非func返回的結果,func只是告訴filter在seq中怎麼去選取元素構成列表返回(也就是能夠使func調用對象返回bool真值的那些元素)
map:
map方法調用:
map(func, seq)
@param func: 可調用對象,接受seq中的元素作爲參數;
@param seq: 可迭代對象。其中每個迭代元素都會被傳入map函數執行一次;
map方法的作用:
對seq可迭代對象中的每個元素,作爲func參數調用一次, 並把func結果添加到返回列表中;
例如:
a = [1,2, 3,4,5]
resultlst = map(lambda x : x + 1, a)
返回結果是:[2,3,4,5,6]
假如我們使用filter中同樣的lambda表達式來調用a中的元素,即:
a = [1,2, 3,4,5]
resultlst = map(lambda x : x > 3, a)
返回結果是:[False,False,Flase,True,True]
這就是說,map函數對seq中的每個元素,將一定會有一個與之對應的返回值。這個返回值就是將該元素傳遞給func後,由func執行返回的結果。
reduce:
reduce方法調用:
reduce(func, seq [, init])
@param func: 特殊的可調用對象。所謂特殊,是該可調用對象要接受兩個參數。
@param seq: 可迭代對象,同樣,該對象中的每個元素將會被func處理一次;
@param init: 初始值。
reduce方法的作用:
對seq中的從左到右的每兩個元素,調用func。然後將本次結果傳遞到下一次調用。
例如:
a = [1,2,3,4,5]
reduce(lambda x, y : x +y, a)
則返回值爲:15
加入我們設定init的值,即:
a = [1,2,3,4,5]
reduce(lambda x, y : x +y, a, 3)
則返回值爲:18
注意:傳遞給reduce的func,必須要能接受兩個參數。並返回一個結果。這個結果將會是傳遞給func進行下次一調用;上面的例子,調用過程是:
1,func(1, 2) 返回 x1
2,func(x1, 3) 返回 x2
3,func(x2, 4) 返回 x3
…...
其實,通過,reduce中func的設計,reduce可以完成map和filter的功能