Python基礎 sorted函式

2021-09-01 05:32:04 字數 2078 閱讀 4988

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

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

print(sorted([36,5,-12,9,-21]))

輸出[-21, -12, 5, 9, 36]

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

print(sorted([36,5,-12,9,-21],key=abs))

輸出[5, 9, -12, -21, 36]

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

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

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

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

keys排序結果 => [5, 9,  12,  21, 36]

| | | | |

最終結果 => [5, 9, -12, -21, 36]

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

print(sorted(['bob','about','zoo','credit']))

輸出['credit', 'zoo', 'about', 'bob']

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

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

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

print(sorted(['bob','about','zoo','credit'],key=str.upper))

輸出['about', 'bob', 'credit', 'zoo']

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

print(sorted(['bob','about','zoo','credit'],key=str.upper,reverse=true))

刪除['zoo', 'credit', 'bob', 'about']

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

sorted()也是乙個高階函式。用sorted()排序的關鍵在於實現乙個對映函式。

假設我們用一組tuple表示學生名字和成績:

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]
請用sorted()對上述列表分別按名字排序:

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]

def by_name(t):

return t[0].upper()

print(sorted(l,key=by_name))

輸出[('adam', 92), ('bart', 66), ('bob', 75), ('lisa', 88)]

Python中sort以及sorted函式初探

help on built in function sorted in module builtin sorted sorted iterable,cmp none,key none,reverse false new sorted list help on built in function so...

python之zip函式和sorted函式

zip 函式和sorted 函式 zip 函式 將兩個序列合併,返回zip物件,可強制轉換為列表或字典 sorted 函式 對序列進行排序,返回乙個排序後的新列表,原資料不改變 合併兩個列表,以列表型別輸出 list str a b c d list num 1,2,3,4 list new zip...

Python基礎 高階函式 sorted

就是比誰是老大 示例 usr bin env python3 coding utf 8 python 高階函式的sorted 用法 反手就是乙個排序 defsortedtest 函式,序列 result sorted 3,4,1,5,0 print result sortedtest 執行結果 d ...