您好,登錄后才能下訂單哦!
Python內置map、reduce、filter、sorted函數(shù)。
map函數(shù)接受兩個參數(shù),一個是函數(shù),一個是Iterable(迭代對象),map將傳入的函數(shù)依次作用到序列的每個元素,并把結果作為新的Iterator
返回。
有一個函數(shù) f(x)=x2
,要把這個函數(shù)作用到一個list [1,2,3,4]
上,用map實現(xiàn):
map傳入第一個參數(shù)是 f 也就是f函數(shù)本身,結果 k 是一個Iterator,Iterator是惰性序列,通過 list()
函數(shù)讓他把整個序列計算出來并返回一個list。
上述計算也可以寫一個循環(huán)計算出來:
用循環(huán)寫出來不簡潔,用 map 函數(shù)一眼就可以看出來。
map函數(shù)還可以計算任意負載函數(shù),比如,把這個list所有字符串轉為數(shù)字:
只需要一行代碼。
reduce用法是把一個函數(shù)作用在一個序列[1,2,3,4,5]上,這個函數(shù)必須接收兩個參數(shù),reduce 把結果繼續(xù)和序列的下一個元素做累積計算,效果如下:
對一個序列求積:
把序列[1, 3, 5, 7, 9]變換成整數(shù)13579:
結合map、reduce函數(shù),把字符串'123.456'
轉換成浮點數(shù)123.456:
和map()類似,filter()也接收一個函數(shù)和一個序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個元素,然后根據返回值是True還是False決定保留還是丟棄該元素。
一個list中,刪掉奇數(shù),只保留偶數(shù):
(lambda是匿名函數(shù))
filter()函數(shù)返回的是一個Iterator,也就是一個惰性序列,所以要強迫filter()完成計算結果,需要用list()函數(shù)獲得所有結果并返回list。
sorted()函數(shù)就可以對list進行排序:
sorted()函數(shù)是一個高階函數(shù),它還可以接收一個key函數(shù)來實現(xiàn)自定義的排序,例如按絕對值大小排序:
key指定的函數(shù)將作用于list的每一個元素上,并根據key函數(shù)返回的結果進行排序。對比原始的list和經過key=abs處理過的list:
然后sorted()函數(shù)按照keys進行排序,并按照對應關系返回list相應的元素:
字符串排序的例子:
默認情況下,對字符串排序,是按照ASCII的大小比較的,由于'Z' < 'a',結果,大寫字母Z會排在小寫字母a的前面。
排序應該忽略大小寫,按照字母序排序。要實現(xiàn)這個算法,不必對現(xiàn)有代碼大加改動,只要我們能用一個key函數(shù)把字符串映射為忽略大小寫排序即可。忽略大小寫來比較兩個字符串,實際上就是先把字符串都變成大寫(或者都變成小寫),再比較。
給sorted傳入key函數(shù),即可實現(xiàn)忽略大小寫的排序:
進行反向排序,不必改動key函數(shù),可以傳入第三個參數(shù)reverse=True:
用sorted()排序的關鍵在于實現(xiàn)一個映射函數(shù)。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。