Python高階函數(shù)sorted排序

sorted用法

sorted是Python提供的功能強(qiáng)大的排序函數(shù)。滿足字符,數(shù)字等排序要求。

對(duì)數(shù)字進(jìn)行排序:
list = [-12, -2, -24, 20, 39, 10];

print(sorted(list))

輸出結(jié)果:

[-24, -12, -2, 10, 20, 39]

sorted 作為一個(gè)高階函數(shù),支持傳入key。key作為排序的規(guī)則.

sorted(array,key)

將list 中元素取絕對(duì)值之后排序

print(sorted(lsit, key=abs))

輸出結(jié)果:

[-2, 10, -12, 20, -24, 39]

原數(shù)組:

數(shù)據(jù) 排序結(jié)果
list [-24, -12, -2, 10, 20, 39]
key=abs [24,12,2,10,20,39] -> [2,10,12,20,24,39]
sorted(list,key = abs) [-2,10,-12,20,-24,39]

高階函數(shù)允許傳入key 作為排序規(guī)則。
先經(jīng)過(guò)key規(guī)則對(duì)數(shù)組進(jìn)行處理之后。在使用sorted進(jìn)行排序。

sorted排序字符:
listStr = ["C", "s", "a", "A", "z", "O"];

# 使用所有的字符轉(zhuǎn)為小寫(xiě),然后根據(jù)ascii碼相應(yīng)字符的排序進(jìn)行比較

print(sorted(listStr, key=str.lower))

輸出結(jié)果:

['a', 'A', 'C', 'O', 's', 'z']

sorted(listStr,key= str.lower, reverse=True)

reverse:允許對(duì)已經(jīng)經(jīng)過(guò)key處理過(guò)的數(shù)據(jù)進(jìn)行反轉(zhuǎn).

# 忽略大小寫(xiě) 排序字符

listStr = ["C", "s", "a", "A", "z", "O"];
# 使用所有的字符轉(zhuǎn)為小寫(xiě),然后根據(jù)ascii碼相應(yīng)字符的排序進(jìn)行比較

print(sorted(listStr, key=str.lower, reverse=True))

輸出結(jié)果:

['z', 's', 'O', 'C', 'a', 'A']

使用operator.itemgetter 作為key進(jìn)行排序

一個(gè)例子:

以下students數(shù)組,結(jié)構(gòu)為(名字,成績(jī),年齡)

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

對(duì)students 按照名字、成績(jī)、年齡排序

使用itemgetter獲取數(shù)組中特定下標(biāo)元素作為key

print(sorted(students, key=itemgetter(1)))

輸出結(jié)果:

[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

print(sorted(students, key=itemgetter(1,0)))

輸出結(jié)果:

[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

由以上結(jié)果可以發(fā)現(xiàn),使用itemgetter獲取數(shù)組元素作為key處理規(guī)則。

計(jì)算邏輯為,依次使用itemgetter中參數(shù)進(jìn)行處理數(shù)組。

使用lamda表達(dá)式作為key


print(sorted(students, key=lambda x: students[1]))

輸出結(jié)果:

[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

以上都支持在reverse屬性對(duì)數(shù)據(jù)進(jìn)行反轉(zhuǎn)。

如果解決了你的問(wèn)題,請(qǐng)點(diǎn)個(gè)贊。

不點(diǎn)就在看一遍吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容