Python-map、reduce、filter、sorted函數

map、reduce、filter、sorted函數

Python內置map、reduce、filter、sorted函數。

map函數

map函數接受兩個參數,一個是函數,一個是Iterable(迭代對象),map將傳入的函數依次作用到序列的每個元素,並把結果作爲新的Iterator返回

有一個函數 f(x)=x²,要把這個函數作用到一個list [1,2,3,4]上,用map實現:

Python-map、reduce、filter、sorted函數

map傳入第一個參數是 f 也就是f函數本身,結果 k 是一個Iterator,Iterator是惰性序列,通過 list() 函數讓他把整個序列計算出來並返回一個list。

上述計算也可以寫一個循環計算出來:

Python-map、reduce、filter、sorted函數

用循環寫出來不簡潔,用 map 函數一眼就可以看出來。

map函數還可以計算任意負載函數,比如,把這個list所有字符串轉爲數字:

Python-map、reduce、filter、sorted函數

只需要一行代碼。

reduce函數

reduce用法是把一個函數作用在一個序列[1,2,3,4,5]上,這個函數必須接收兩個參數,reduce 把結果繼續和序列的下一個元素做累積計算,效果如下:

Python-map、reduce、filter、sorted函數

對一個序列求積:

Python-map、reduce、filter、sorted函數

把序列[1, 3, 5, 7, 9]變換成整數13579:

Python-map、reduce、filter、sorted函數

結合map、reduce函數,把字符串'123.456'轉換成浮點數123.456:

Python-map、reduce、filter、sorted函數

filter()函數

和map()類似,filter()也接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。

一個list中,刪掉奇數,只保留偶數:

Python-map、reduce、filter、sorted函數

(lambda是匿名函數)

filter()函數返回的是一個Iterator,也就是一個惰性序列,所以要強迫filter()完成計算結果,需要用list()函數獲得所有結果並返回list。

sorted()函數

sorted()函數就可以對list進行排序:

Python-map、reduce、filter、sorted函數

sorted()函數是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按絕對值大小排序:

Python-map、reduce、filter、sorted函數

key指定的函數將作用於list的每一個元素上,並根據key函數返回的結果進行排序。對比原始的list和經過key=abs處理過的list:

Python-map、reduce、filter、sorted函數

然後sorted()函數按照keys進行排序,並按照對應關係返回list相應的元素:

Python-map、reduce、filter、sorted函數

字符串排序的例子:

Python-map、reduce、filter、sorted函數

默認情況下,對字符串排序,是按照ASCII的大小比較的,由於'Z' < 'a',結果,大寫字母Z會排在小寫字母a的前面。

排序應該忽略大小寫,按照字母序排序。要實現這個算法,不必對現有代碼大加改動,只要我們能用一個key函數把字符串映射爲忽略大小寫排序即可。忽略大小寫來比較兩個字符串,實際上就是先把字符串都變成大寫(或者都變成小寫),再比較。

給sorted傳入key函數,即可實現忽略大小寫的排序:

Python-map、reduce、filter、sorted函數

進行反向排序,不必改動key函數,可以傳入第三個參數reverse=True:

Python-map、reduce、filter、sorted函數

用sorted()排序的關鍵在於實現一個映射函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章