python中的map、filter、reduce函數

三個函數比較相似,都是應用於序列的內置函數。常見的序列包括list、tuple、str。ide

1.map函數函數

map函數會根據提供的函數對指定序列作映射。ip

map函數的定義:string

map(function, sequence[, sequence, ...]) -> listit

經過定義能夠看到,這個函數的第一個參數是一個函數,剩下的參數是一個或多個序列,返回值是一個集合。io

function能夠理解爲是一個一對一或多對一函數,map的做用是以參數序列中的每個元素調用function函數,返回包含每次function函數返回值的list。function

好比要對一個序列中的每一個元素進行平方運算:class

map(lambda x: x ** 2, [1, 2, 3, 4, 5])lambda

返回結果爲:map

[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, or string

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。

相關文章
相關標籤/搜索