最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

排序 sorted函數(shù)和lambda的組合應(yīng)用(python3)

2023-07-23 09:33 作者:biggertree-Jing  | 我要投稿

本筆記可以領(lǐng)會(huì)sorted()排序函數(shù)與lambda匿名函數(shù)的用法

sorted()函數(shù)和lambda函數(shù)的應(yīng)用,能有效提高代碼效率,但初學(xué)者容易混淆,下面對(duì)這兩個(gè)函數(shù)及其應(yīng)用進(jìn)行分拆講解。

一、關(guān)于函數(shù)sorted()

sorted()?函數(shù)對(duì)所有可迭代的對(duì)象進(jìn)行排序操作。sorted的語法如下:

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

參數(shù)說明:

  • iterable -- 可迭代對(duì)象。

  • key?-- 主要是用來進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來進(jìn)行排序。

  • reverse?-- 排序規(guī)則,reverse = True 降序 , reverse = False 升序(默認(rèn))。

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

二、關(guān)于函數(shù)lambda:

匿名函數(shù)lambda:是指一類無需定義標(biāo)識(shí)符(函數(shù)名)的函數(shù)或子程序。lambda 函數(shù)可以接收任意多個(gè)參數(shù) (包括可選參數(shù)) 并且返回單個(gè)表達(dá)式的值。

lambda匿名函數(shù)的格式:冒號(hào)前是參數(shù),可以有多個(gè),用逗號(hào)隔開,冒號(hào)右邊的為表達(dá)式。其實(shí)lambda返回值是一個(gè)函數(shù)的地址,也就是函數(shù)對(duì)象。

需要要注意的是:lambda 函數(shù)包含的表達(dá)式只能是一個(gè)。

例如,定義一個(gè)返回?cái)?shù)的平方的lambda:

a=lambda x:x*x

print(a(3))? ??

那么輸出值是:9

?如果我們只需要一個(gè)簡單的函數(shù),lambda 是一個(gè)很好的選擇,因?yàn)樗梢员豢醋魇嵌x函數(shù)的一種更簡單的方法。因此,我們可以給它一個(gè)名稱,并像普通函數(shù)一樣使用它。add_ten() 和 lambda_add_ten() 方法的結(jié)果是相同的,但是 lambda 函數(shù)可以使我們的代碼更短更清晰。如以下簡單函數(shù):

Python中使用lambda的話,寫成這樣

lambda包含的表達(dá)式不能超過一個(gè)。任何能夠使用它的地方,都可以定義一個(gè)單獨(dú)的普通函數(shù)來進(jìn)行替換。我將它用在需要封裝特殊的、非重用代碼上,避免代碼充斥著大量單行函數(shù)。

三、幾個(gè)實(shí)際案例

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

1. 對(duì)列表中的數(shù)字按字符串長度排序

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

print(b)

----------------------------------------------------------------------

[1,?13,?89,?237,?100]

剛看到這段代碼有點(diǎn)繞不開了,仔細(xì)拆開,就迎刃而解了。

首先,sorted里面是兩個(gè)參數(shù),一個(gè)是數(shù)列[13,1,237,89,100],另一個(gè)是lambda函數(shù):key=lambda?x:?len(str(x)),這里最容易混淆的是key,可能有人會(huì)把他當(dāng)成定義的lambda函數(shù)名,其實(shí)key是sorted函數(shù)中的參數(shù)名稱關(guān)鍵字。因此,這里就是對(duì)數(shù)列按照llambda函數(shù)返回值進(jìn)行排序,也就是按照轉(zhuǎn)換成字符串長度排序。

很明顯,按照轉(zhuǎn)換的字符串長度,數(shù)列[13,1,237,89,100]長度應(yīng)該依次是:[2,1,3,2,3]。

因此,對(duì)數(shù)列[13,1,237,89,100]按長度排列結(jié)果如下:

[1,?13,?89,?237,?100]

?

2. 按列表內(nèi)運(yùn)算結(jié)果排序

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中已經(jīng)講了sorted()函數(shù)的結(jié)構(gòu)和key的作用。很明顯這是對(duì)兩個(gè)列表按照列表中第0和第2個(gè)的和排序,第1個(gè)列表第0個(gè)和第2個(gè)是1+3=4,第2個(gè)列表第0個(gè)和第2個(gè)是2+1=3,第1個(gè)列表值大于第2個(gè)列表的,因此第2個(gè)列表前移,得到結(jié)果:

[[2,?3,?1],?[1,?3,?3]]

?

3. 對(duì)元組按元組元素值排序?

?

x=[('a',?3),?('b',4),?('c',1)]

r=sorted(x,?key=lambda?y:y[1])

print(r)

--------------------------------------

[('c',?1),?('a',?3),?('b',?4)]

很明顯,這個(gè)表達(dá)式是對(duì)x元組列表按照每個(gè)元組第2個(gè)元素排列,結(jié)果如下:

[('c',?1),?('a',?3),?('b',?4)]

4.將字符串,按照字符中的數(shù)字進(jìn)行排序

在Python中,如果要按照字符串中的數(shù)字進(jìn)行排序,需要使用自定義排序方法。Python內(nèi)置的排序方法只能按照字符串的字典序進(jìn)行排序。我們可以通過對(duì)字符串中數(shù)字的提取和比較來實(shí)現(xiàn)正確的排序。如果通過普通的Python函數(shù)來實(shí)現(xiàn),代碼如下:

在上面的示例代碼中,我們定義了一個(gè)convert_text()函數(shù),用于對(duì)每個(gè)字符串進(jìn)行分割和提取,并將其轉(zhuǎn)換為元組(a,b),其中a是不包含數(shù)字的字符串,b是數(shù)字字符串的轉(zhuǎn)換結(jié)果。然后,我們使用sorted()函數(shù)對(duì)字符串?dāng)?shù)組進(jìn)行排序,指定key=convert_text即可按照convert_text()函數(shù)的返回值進(jìn)行排序。

在這個(gè)示例中,我們使用了正則表達(dá)式來將數(shù)字和非數(shù)字字符分割開來,并對(duì)數(shù)字字符串進(jìn)行了轉(zhuǎn)換。這個(gè)方法不光適用于單個(gè)數(shù)字的字符串,也可以處理包含多個(gè)數(shù)字的字符串。

當(dāng)我們運(yùn)行代碼時(shí),輸出結(jié)果為:

普通函數(shù)雖然能夠解決這個(gè)自定義排序的問題,但是不簡潔,使用lambda會(huì)更加簡單,見以下代碼(原創(chuàng)):

運(yùn)行結(jié)果亦為:

可見,使用lambda一行代碼sorted(arr,key=lambda x: int(x[1:])) 即可高效解決問題。

5. 將字符串,按照字符中的數(shù)字進(jìn)行排序,另一案例

先看需要排序的數(shù)據(jù):

上圖,列表a中嵌套列表,請(qǐng)按照嵌套列表的第三項(xiàng)“S+數(shù)字”中的數(shù)字進(jìn)行排序。由于列表元素“S+數(shù)字”中的“數(shù)字”此時(shí)是字符串類型的數(shù)據(jù),必須先轉(zhuǎn)換成整數(shù)類型數(shù)據(jù),才能按數(shù)字排序,使用lambda可以快速實(shí)現(xiàn)目標(biāo),代碼如下(原創(chuàng)):

運(yùn)行結(jié)果:

使用lambda,又是一行代碼搞定。

以上內(nèi)容,對(duì)sorted()和lambda函數(shù)的組合應(yīng)用進(jìn)行了分析,希望對(duì)大家有所幫助。

參考文獻(xiàn):

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

https://www.cnblogs.com/loveu123/p/12682480.html

https://baijiahao.baidu.com/s?id=1746742334772754606

https://deepinout.com/python/python-qa/t_how-to-correctly-sort-a-string-with-a-number-inside-in-python.html


注:本文藍(lán)色內(nèi)容為本人原創(chuàng)(轉(zhuǎn)載請(qǐng)注明出處),其他部分綜合整理自不同的網(wǎng)絡(luò)內(nèi)容,出處見參考文獻(xiàn)。


排序 sorted函數(shù)和lambda的組合應(yīng)用(python3)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
古田县| 图木舒克市| 普兰店市| 玛曲县| 长丰县| 五河县| 卢氏县| 易门县| 杭州市| 芜湖县| 宁明县| 仁化县| 东山县| 雷山县| 麦盖提县| 甘南县| 沁源县| 临泽县| 咸宁市| 敦化市| 句容市| 罗源县| 崇明县| 桃园县| 政和县| 府谷县| 临汾市| 崇左市| 永嘉县| 诏安县| 盐山县| 荣成市| 西宁市| 尼玛县| 临湘市| 榆社县| 青阳县| 阳曲县| 博客| 阿拉善左旗| 育儿|