三個函數(shù)比較類似,都是應(yīng)用于序列的內(nèi)置函數(shù)。常見的序列包括list、tuple、str。
1.map函數(shù)
map函數(shù)會根據(jù)提供的函數(shù)對指定序列做映射。
map函數(shù)的定義:
map(function, sequence[, sequence, ...]) -> list
通過定義可以看到,這個函數(shù)的第一個參數(shù)是一個函數(shù),剩下的參數(shù)是一個或多個序列,返回值是一個集合。
function可以理解為是一個一對一或多對一函數(shù),map的作用是以參數(shù)序列中的每一個元素調(diào)用function函數(shù),返回包含每次function函數(shù)返回值的list。
比如要對一個序列中的每個元素進行平方運算:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回結(jié)果為:
[1, 4, 9, 16, 25]
在參數(shù)存在多個序列時,會依次以每個序列中相同位置的元素做參數(shù)調(diào)用function函數(shù)。
比如要對兩個序列中的元素依次求和。
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8,
10])
map返回的list中第一個元素為,參數(shù)序列1的第一個元素加參數(shù)序列2中的第一個元素(1 + 2),
list中的第二個元素為,參數(shù)序列1中的第二個元素加參數(shù)序列2中的第二個元素(3 + 4),
依次類推,最后的返回結(jié)果為:
[3, 7, 11, 15, 19]
要注意function函數(shù)的參數(shù)數(shù)量,要和map中提供的集合數(shù)量相匹配。
如果集合長度不相等,會以最小長度對所有集合進行截取。
當(dāng)函數(shù)為None時,操作和zip相似:
map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
返回結(jié)果為:
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
2.filter函數(shù)
filter函數(shù)會對指定序列執(zhí)行過濾操作。
filter函數(shù)的定義:
filter(function or None, sequence) -> list, tuple, or
string
function是一個謂詞函數(shù),接受一個參數(shù),返回布爾值True或False。
filter函數(shù)會對序列參數(shù)sequence中的每個元素調(diào)用function函數(shù),最后返回的結(jié)果包含調(diào)用結(jié)果為True的元素。
返回值的類型和參數(shù)sequence的類型相同
比如返回序列中的所有偶數(shù):
def is_even(x):
return x & 1 != 0
filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
返回結(jié)果為:
[1, 3, 5, 7, 9]
如果function參數(shù)為None,返回結(jié)果和sequence參數(shù)相同。
3.reduce函數(shù)
reduce函數(shù),reduce函數(shù)會對參數(shù)序列中元素進行累積。
reduce函數(shù)的定義:
reduce(function, sequence[, initial]) -> value
function參數(shù)是一個有兩個參數(shù)的函數(shù),reduce依次從sequence中取一個元素,和上一次調(diào)用function的結(jié)果做參數(shù)再次調(diào)用function。
第一次調(diào)用function時,如果提供initial參數(shù),會以sequence中的第一個元素和initial作為參數(shù)調(diào)用function,否則會以序列sequence中的前兩個元素做參數(shù)調(diào)用function。
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
結(jié)果為21(
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
結(jié)果為20
注意function函數(shù)不能為None。
|
|