map()函數有兩個參數,壹個是函數,另壹個是Iterable。map將依次作用於序列的每個元素,並將結果作為新的叠代器返回。
例如,如果我們有壹個函數f(x)=x*2,我們應該將這個函數應用於壹個列表[1,2,3,4,5,6,7,8,
9],可以使用map()。
& gt& gt& gt定義f(x):
...返回x*2
...
& gt& gt& gtr = map(f,[1,2,3,4,5,6,7,8,9])
& gt& gt& gt列表(r)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
所以map()作為壹個高階函數,實際上抽象了運算規則,所以我們不僅可以計算簡單的f(x)=x*2,還可以計算任何復雜的函數,比如把這個列表中的所有數字轉換成字符串:
& gt& gt& gtlist(map(str,[1,2,3,4,5,6,7,8,9]))
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
2、減少
Reduce是對序列[x1,x2,
X3……].....],這個函數必須接收兩個參數,reduce將繼續用序列的下壹個元素累加結果。簡單來說,先計算x1和x2的結果,再用x3計算結果,以此類推。例如,序列求和可以通過reduce來實現。
& gt& gt& gt從functools導入減少
& gt& gt& gtdef add(x,y):
...返回x + y
...
& gt& gt& gtreduce(add,[1,3,5,7,9])
25
換句話說,假設python不提供int()函數,妳可以自己寫壹個函數把字符串轉換成整數,而且只需要幾行代碼。
3、過濾
用於過濾序列。與映射函數類似,過濾器也接收函數和序列。與map不同的是,filter依次作用於每個元素,然後根據返回值的真假來決定是保留還是丟棄該元素。例如,在壹個列表中,偶數被刪除,只有奇數被保留。妳可以寫:
def is_odd(n):
返回n % 2 == 1
list(filter(is_odd,[1,2,4,5,6,9,10,15]))
#結果:[1,5,9,15]
刪除序列中的空字符串,可以這樣寫:
def not_empty:
返回s和s.strip()
list(filter(not_empty,["A ",""," B ",None," C "," "]))
#結果:["A "," B "," C"]
可見,使用filter()高階函數的關鍵是正確實現壹個濾波函數。
4、排序
無論是冒泡排序還是快速排序,排序的核心都是比較兩個元素的大小。如果是數字,我們可以直接比較,但是如果是壹個字符串或者兩個dict呢?直接比較數學大小是沒有意義的。所以比較的過程必須通過函數抽象出來,Python內置的sorted()函數可以對列表進行排序:
& gt& gt& gt已排序([36,5,-12,9,-21])
[-21, -12, 5, 9, 36]
另外,sorted()函數也是壹個高階函數,它還可以接收壹個key函數實現自定義排序,比如按絕對值排序:
& gt& gt& gt已排序([36,5,-12,9,-21],key=abs)
[5, 9, -12, -21, 36]