排序 sorted函數和lambda的組合應用(python3)


sorted()函數和lambda函數的應用,能有效提高代碼效率,但初學者容易混淆,下面對這兩個函數及其應用進行分拆講解。

一、關於函數sorted()

sorted() 函數對所有可迭代的對象進行排序操作。sorted的語法如下:

sorted(iterable, key=None, reverse=False)

參數說明:

  • iterable -- 可迭代對象。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回值:重新排序的列表。

二、關於函數lambda:

匿名函數lambda:是指一類無需定義標識符(函數名)的函數或子程序。lambda 函數可以接收任意多個參數 (包括可選參數) 並且返回單個表達式的值。

lambda匿名函數的格式:冒號前是參數,可以有多個,用逗號隔開,冒號右邊的為表達式。其實lambda返回值是一個函數的地址,也就是函數對象。

需要要注意的是:lambda 函數包含的表達式只能是一個。

例如,定義一個返回數的平方的lambda:

a=lambda x:x*x

print(a(3))    

那么輸出值是:9

 

三、幾個實際案例

看到幾個sorted與lambda的例子,很有代表性,了解了這些,這兩個函數使用就容易理解了

1. 對列表中的數字按字符串長度排序

b=sorted([13,1,237,89,100], key=lambda x: len(str(x)))

print(b)
----------------------------------------------------------------------
[1, 13, 89, 237, 100]
剛看到這段代碼有點繞不開了,仔細拆開,就迎刃而解了。
首先,sorted里面是兩個參數,一個是數列[13,1,237,89,100],另一個是lambda函數:key=lambda x: len(str(x)),這里最容易混淆的是key,可能有人會把他當成定義的lambda函數名,其實key是sorted函數中的參數名稱關鍵字。因此,這里就是對數列按照llambda函數返回值進行排序,也就是按照轉換成字符串長度排序。
很明顯,按照轉換的字符串長度,數列 [13,1,237,89,100]長度應該依次是:[2,1,3,2,3]。
因此,對數列 [13,1,237,89,100]按長度排列結果如下:
[1, 13, 89, 237, 100]
 
2. 按列表內運算結果排序
x=[[1,3,3],[2,3,1]]
y=sorted(x, key=lambda item:item[0]+item[2])
print(y)
--------------------------------------------------------------
[[2, 3, 1], [1, 3, 3]]
例子1中已經講了sorted()函數的結構和key的作用。很明顯這是對兩個列表按照列表中第0和第2個的和排序,第1個列表第0個和第2個是1+3=4,第2個列表第0個和第2個是2+1=3,第1個列表值大於第2個列表的,因此第2個列表前移,得到結果:
[[2, 3, 1], [1, 3, 3]]
 
3. 對元組按元組元素值排序
 
x=[('a', 3), ('b',4), ('c',1)]
r=sorted(x, key=lambda y:y[1])
print(r)
--------------------------------------
[('c', 1), ('a', 3), ('b', 4)]
很明顯,這個表達式是對x元組列表按照每個元組第2個元素排列,結果如下:
[('c', 1), ('a', 3), ('b', 4)]

以上內容,對sorted()和llambda函數的組合應用進行了分析,希望對大家有所幫助。

參考文獻:

https://www.runoob.com/python3/python3-func-sorted.html

https://www.cnblogs.com/kaishirenshi/p/8611358.html

https://www.cnblogs.com/huigebj/p/11433896.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM