日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

《Python数据科学指南》——1.23 采用键排序

發(fā)布時(shí)間:2025/3/18 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Python数据科学指南》——1.23 采用键排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)書摘來自異步社區(qū)《Python數(shù)據(jù)科學(xué)指南》一書中的第1章,第1.23節(jié),作者[印度] Gopi Subramanian ,方延風(fēng) 劉丹 譯,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號(hào)查看。

1.23 采用鍵排序

到目前為止,我們的示例都是采用元素對(duì)列表或其他序列進(jìn)行排序,現(xiàn)在我們來試試對(duì)它們采用鍵排序。在前面的那些示例中,元素即是鍵。而在真實(shí)場景中,記錄的復(fù)雜度要高得多,一條記錄包含了多個(gè)列,我們有時(shí)需要對(duì)其中一個(gè)或多個(gè)列進(jìn)行排序。我們通過對(duì)一個(gè)元組的列表進(jìn)行排序來闡述,并將之推廣到其他的序列類型。

1.23.1 準(zhǔn)備工作

本示例中,一個(gè)單獨(dú)的元組表示一個(gè)人的個(gè)人記錄,包括名字、ID、年齡等。我們來編寫一段對(duì)不同的域進(jìn)行排序的代碼。

1.23.2 操作方法

我們使用列表和元組來編寫一個(gè)記錄類的結(jié)構(gòu),并使用這些數(shù)據(jù)演示如何采用鍵進(jìn)行排序。

# 1.首先創(chuàng)建一個(gè)元組組成的列表用來測試排序 employee_records = [ ('joe',1,53),('beck',2,26), \('ele',6,32),('neo',3,45), \('christ',5,33),('trinity',4,29), \]# 2.使用雇員名字進(jìn)行排序 print sorted(employee_records,key=lambda emp : emp[0]) """ 輸出結(jié)果如下。 [('beck', 2, 26), ('christ', 5, 33), ('ele', 6, 32), ('joe', 1, 53),\ ('neo', 3, 45), ('trinity', 4, 29)] """ # 3. 使用雇員ID進(jìn)行排序 print sorted(employee_records,key=lambda emp : emp[1]) """ 輸出結(jié)果如下。 [('joe', 1, 53), ('beck', 2, 26), ('neo', 3, 45), ('trinity', 4, 29),\ ('christ', 5, 33), ('ele', 6, 32)] """ # 4. 使用雇員年齡進(jìn)行排序 print sorted(employee_records,key=lambda emp : emp[2]) """

輸出結(jié)果如下。

[('beck', 2, 26), ('trinity', 4, 29), ('ele', 6, 32), ('christ', 5,\ 33), ('neo', 3, 45), ('joe', 1, 53)] """

1.23.3 工作原理

在我們的示例中,每條記錄有3個(gè)域:姓名、ID和年齡。我們使用lambda函數(shù)來將我們需要排序的鍵進(jìn)行傳遞。在第2步中,我們將姓名作為鍵來進(jìn)行排序。類似地,在第2步和第3步中,都分別采用了ID和年齡作為鍵,這些不同步驟里的不同輸出結(jié)果顯示了我們想要的排序結(jié)果。

1.23.4 更多內(nèi)容

由于鍵排序十分重要,Python提供了快捷的函數(shù)來訪問鍵,而不用自己寫lambda函數(shù)。operator模塊中提供了itemgetter、attrgetter和methodcaller等幾個(gè)函數(shù)。前面排序示例我們可以使用itemgetter來重寫,代碼如下。

from operator import itemgetter employee_records = [ ('joe',1,53),('beck',2,26), \('ele',6,32),('neo',3,45), \('christ',5,33),('trinity',4,29), \] print sorted(employee_records,key=itemgetter(0)) """ [('beck', 2, 26), ('christ', 5, 33), ('ele', 6, 32), ('joe', 1, 53),\ ('neo', 3, 45), ('trinity', 4, 29)] """ print sorted(employee_records,key=itemgetter(1)) """ [('joe', 1, 53), ('beck', 2, 26), ('neo', 3, 45), ('trinity', 4, 29),\ ('christ', 5, 33), ('ele', 6, 32)] """ print sorted(employee_records,key=itemgetter(2)) """ [('beck', 2, 26), ('trinity', 4, 29), ('ele', 6, 32), ('christ', 5,\ 33), ('neo', 3, 45), ('joe', 1, 53)] """

請注意我們不再使用lambda函數(shù),而是采用itemgetter來指定我們用來排序的鍵。如果需要多級(jí)排序,itemgetter可以接收多個(gè)用來排序的域。例如,我們先對(duì)名字,再對(duì)年齡進(jìn)行排序,那代碼如下。

>>> sorted(employee_records,key=itemgetter(0,1)) [('beck', 2, 26), ('christ', 5, 33), ('ele', 6, 32), ('joe', 1, 53), ('neo', 3, 45), ('trinity', 4, 29)]

如果可迭代對(duì)象里的元素是類對(duì)象,則可以用attrgetter和methodcaller輕松搞定。請看如下示例。

# 將雇員記錄封裝為類對(duì)象 class employee(object):def __init__(self,name,id,age):self.name = nameself.id = idself.age = agedef pretty_print(self):print self.name,self.id,self.age# 將這些類對(duì)象填入列表里 employee_records = [] emp1 = employee('joe',1,53) emp2 = employee('beck',2,26) emp3 = employee('ele',6,32)employee_records.append(emp1) employee_records.append(emp2) employee_records.append(emp3)# 打印輸出記錄 for emp in employee_records:emp.pretty_print()from operator import attrgetter employee_records_sorted = sorted(employee_ records,key=attrgetter('age')) # 打印輸出排序后的記錄 for emp in employee_records_sorted:emp.pretty_print()

構(gòu)造器使用name、age和ID等3個(gè)變量對(duì)類進(jìn)行初始化,類還擁有一個(gè)pretty_print方法來輸出類對(duì)象的各個(gè)值。

接著,把這些類對(duì)象填入一個(gè)列表。

employee_records = [] emp1 = employee('joe',1,53) emp2 = employee('beck',2,26) emp3 = employee('ele',6,32) employee_records.append(emp1) employee_records.append(emp2) employee_records.append(emp3)

現(xiàn)在,我們有一個(gè)雇員對(duì)象的列表,每個(gè)對(duì)象中有3個(gè)變量:name、ID和age。我們將列表打印輸出來觀察其順序。

joe 1 53 beck 2 26 ele 6 32

如你所見,你的輸入順序被保留下來了。現(xiàn)在,我們使用attrgetter根據(jù)age域來對(duì)列表進(jìn)行排序。

employee_records_sorted = sorted(employee_ records,key=attrgetter('age'))

打印輸出排序后的列表,結(jié)果如下。

beck 2 26 ele 6 32 joe 1 53

記錄已經(jīng)被按照年齡進(jìn)行了排序。

如果想用類里的某個(gè)方法來決定排序方式,我們得使用methodcaller。我們設(shè)計(jì)一個(gè)演示場景:添加一個(gè)隨機(jī)方法,將年齡除以ID。

class employee(object):def __init__(self,name,id,age):self.name = nameself.id = idself.age = agedef pretty_print(self):print self.name,self.id,self.agedef random_method(self):return self.age / self.id# 填充數(shù)據(jù) employee_records = [] emp1 = employee('joe',1,53) emp2 = employee('beck',2,26) emp3 = employee('ele',6,32)employee_records.append(emp1) employee_records.append(emp2) employee_records.append(emp3)from operator import methodcaller employee_records_sorted = sorted(employee_records,key=methodcaller('ra\ ndom_method')) for emp in employee_records_sorted:emp.pretty_print()

現(xiàn)在我們調(diào)用這個(gè)方法來進(jìn)行排序。

sorted(employee_records,key=methodcaller('random_method'))

打印輸出排序后的列表,結(jié)果如下。

ele 6 32 beck 2 26 joe 1 53

總結(jié)

以上是生活随笔為你收集整理的《Python数据科学指南》——1.23 采用键排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 不卡视频一区二区三区 | 激情视频区 | 女人高潮娇喘声mp3 乱色视频 | 胖女人做爰全过程 | 亚洲女人天堂网 | av不卡网站 | 超碰精品| 国产精品成人99一区无码 | 亚洲成人精品在线 | 美女久久精品 | 小婕子伦流澡到高潮h | 成人免费影视网站 | 成人有色视频 | 岛国av中文字幕 | 无码人妻精品一区二区三区温州 | 深喉口爆一区二区三区 | 国产中文一区二区 | 欧美三级中文字幕 | 中文字幕一区二区精品 | 久久久精品网站 | 永久av网站| 成人午夜精品 | 国产精品麻豆成人av电影艾秋 | 成人日韩精品 | 91麻豆精品国产91久久久无需广告 | 日本成人黄色片 | 日韩精品一区二区在线播放 | 亚色中文 | 国产精品88久久久久久妇女 | 中文字幕在线播放不卡 | 国产精品交换 | 麻豆视频传媒入口 | 加勒比hezyo黑人专区 | 麻豆国产尤物av尤物在线观看 | 国产免费一级 | 污视频在线播放 | 精品欧美黑人一区二区三区 | 成人精品福利视频 | 一区二区三区免费看视频 | jizz亚洲女人| 朴银狐电影中文在线看 | 国产精品久久久久久久久免费软件 | 日本午夜啪啪 | 丰满熟女人妻一区二区三区 | 日本一区二区三区在线免费观看 | 天天综合天天做 | 久草网在线观看 | 91蜜桃视频 | 麻豆社| 日本我不卡 | 在线激情小视频 | 亚洲在线一区 | 免费黄色国产 | 蜜桃综合网 | 日韩欧美中文在线 | 69视频一区二区 | 小视频免费在线观看 | 女人18片毛片60分钟 | 天堂一区二区三区四区 | 加勒比hezyo黑人专区 | 天天操狠狠操 | 国产精品资源网 | 农村少妇久久久久久久 | 操碰在线观看 | 欧美一区欧美二区 | 色射网| 欧美精品国产 | 97香蕉久久夜色精品国产 | 中文字幕麻豆 | 影音先锋美女 | a黄色片 | 婷婷狠狠| 天天爱天天干天天操 | 蜜桃成人无码区免费视频网站 | 麻豆系列在线观看 | 日韩第一页在线 | 伊人亚洲 | 国产激情免费视频 | 人人插人人射 | 四虎在线观看视频 | jizzjizzjizz国产 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久精品国产精品亚洲色婷婷 | 午夜a级片| 色婷婷av一区二区三区之e本道 | 俺也去综合 | 国产精品久久伊人 | 18av在线视频 | 国产私密视频 | 999资源站| 免费看国产黄色 | 影音先锋丝袜制服 | 久久精品午夜 | 日韩精品免费一区二区三区 | 久久桃色 | av男人的天堂av | www久久| 伊人影院在线播放 | 亚洲性av|