三個函數(shù)比較類似,都是應用于序列的內(nèi)置函數(shù)。常見的序列包括list、tuple、str。
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。lambda 結(jié)合的例子
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回結(jié)果為:
[1, 4, 9, 16, 25]
```
- **單參數(shù)例子**
```
>>> def add100(x):
... return x+100
...
>>> hh = [11,22,33]
>>> map(add100,hh)
[111, 122, 133]
- ** list參數(shù)的例子**
>>> def abc(a, b, c):
... return a*10000 + b*100 + c
...
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
[114477, 225588, 336699]
- ** function為None的例子**
>>> list1 = [11,22,33]
>>> map(None,list1)
[11, 22, 33]
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(None,list1,list2,list3)
[(11, 44, 77), (22, 55, 88), (33, 66, 99)]
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ù)相同。
reduce函數(shù)
- reduce函數(shù),reduce函數(shù)會對參數(shù)序列中元素進行累積。
- py3以后使用,必須導入 from functools import reduce
- 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。累加例子
def myadd(x,y):
return x+y
sum=reduce(myadd,(1,2,3,4,5,6,7))
print(sum)
#結(jié)果就是輸出1+2+3+4+5+6+7的結(jié)果即28
- lambda 結(jié)合的例子
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
結(jié)果為21( (((((1+2)+3)+4)+5)+6) )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
結(jié)果為20
- 注意function函數(shù)不能為None。