python高階函數sorted

來源:互聯網
上載者:User

標籤:ever   技術分享   現在   div   col   大小   lan   ted   src   

原文

排序也是在程式中經常用到的演算法。無論使用冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函數抽象出來。

Python內建的sorted()函數就可以對list進行排序:

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

 

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

 

list = [36, 5, -12, 9, -21]keys = [36, 5,  12, 9,  21]

我們再看一個字串排序的例子:

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

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

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

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

 

從上述例子可以看出,高階函數的抽象能力是非常強大的,而且,核心代碼可以保持得非常簡潔。

小結

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

 

python高階函數sorted

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.