python中的map、filter、reduce函式
阿新 • • 發佈:2019-01-01
三個函式比較類似,都是應用於序列的內建函式。常見的序列包括list、tuple、str。
1.map函式
map函式會根據提供的函式對指定序列做對映。
map函式的定義:
map(function, sequence[, sequence, ...]) -> list
通過定義可以看到,這個函式的第一個引數是一個函式,剩下的引數是一個或多個序列,返回值是一個集合。
function可以理解為是一個一對一或多對一函式,map的作用是以引數序列中的每一個元素呼叫function函式,返回包含每次function函式返回值的list。
比如要對一個序列中的每個元素進行平方運算:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回結果為:
[1, 4, 9, 16, 25]
在引數存在多個序列時,會依次以每個序列中相同位置的元素做引數呼叫function函式。
比如要對兩個序列中的元素依次求和。
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8,10])
map返回的list中第一個元素為,引數序列1的第一個元素加引數序列2中的第一個元素(1 + 2),
list中的第二個元素為,引數序列1中的第二個元素加引數序列2中的第二個元素(3 + 4),
依次類推,最後的返回結果為:
[3, 7, 11, 15, 19]
要注意function函式的引數數量,要和map中提供的集合數量相匹配。
如果集合長度不相等,會以最小長度對所有集合進行擷取。
當函式為None時,操作和zip相似:
map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
返回結果為:
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
2.filter函式
filter函式會對指定序列執行過濾操作。
filter函式的定義:
filter(function or None, sequence) -> list, tuple, orstring
function是一個謂詞函式,接受一個引數,返回布林值True或False。
filter函式會對序列引數sequence中的每個元素呼叫function函式,最後返回的結果包含呼叫結果為True的元素。
返回值的型別和引數sequence的型別相同
比如返回序列中的所有偶數:
def is_even(x):
return x & 1 != 0
filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
返回結果為:
[1, 3, 5, 7, 9]
如果function引數為None,返回結果和sequence引數相同。
3.reduce函式
reduce函式,reduce函式會對引數序列中元素進行累積。
reduce函式的定義:
reduce(function, sequence[, initial]) -> value
function引數是一個有兩個引數的函式,reduce依次從sequence中取一個元素,和上一次呼叫function的結果做引數再次呼叫function。
第一次呼叫function時,如果提供initial引數,會以sequence中的第一個元素和initial作為引數呼叫function,否則會以序列sequence中的前兩個元素做引數呼叫function。
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
結果為21( (((((1+2)+3)+4)+5)+6) )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
結果為20
注意function函式不能為None。