国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python神器函數sorted():3個您不得不看的特性

開發 后端
在本文中,我們討論了為什么幾乎應該始終使用sorted()函數而不是sort()函數的三個原因。

作為一種通用語言,Python已在各種學術和工業領域逐漸流行,用于科學計算,工程,Web開發和許多其他用途。 Python的一項引人入勝的功能是它是如此靈活,以至于同一功能可以有多個實現。讓我們考慮以下簡單的示例。

  1. >>> # sort a list using sort() 
  2. >>> names0 = ['Danny', 'Johnny', 'Billy', 'Donny'] 
  3. >>> names0.sort() 
  4. >>> names0['Billy', 'Danny', 'Donny', 'Johnny'] 
  5. >>>>>> # sort a list using sorted() 
  6. >>> names1 = ['Danny', 'Johnny', 'Billy', 'Donny'] 
  7. >>> sorted(names1)['Billy', 'Danny', 'Donny', 'Johnny']>>> 

[“比利”,“丹尼”,“唐尼”,“約翰尼”]

在上面的代碼中,我們創建了兩個列表:names0和names1,并使用sort()和sorted()函數分別對它們進行排序。顯然,我們能夠以相同順序在列表中獲得。

盡管sort()和sorted()函數之間的相似之處,但我想指出,幾乎總是要使用sorted()而不是sort()。這是三個原因。

1. 與任何迭代器的兼容性

第一個原因是sorted()函數更靈活,因為它可以與任何可迭代對象一起使用。相比之下,sort()函數僅適用于列表。如果您不知道什么是可迭代的,可以參考下面的我的上一篇文章。簡而言之,可迭代對象是可以在迭代中進行迭代的Python對象,例如元組,列表,集合和字典。

讓我們根據兼容的數據類型比較sorted()和sort()。需要注意的一件事是,這兩種功能的使用方式存在細微的差異。 sorted()函數將iterable作為參數,而sort()函數的調用者則使用點表示法調用該函數。

  1. >>> # sort a tuple 
  2. >>> _ = (3, 5, 4).sort() 
  3. Traceback (most recent call last):  File "<stdin>", line 1, in <module> 
  4. AttributeError: 'tuple' object has no attribute 'sort' 
  5. >>> _ = sorted((3, 5, 4)) 
  6. >>>>>> # sort a dictionary>>> _ = {2: 'two', 0: 'zero', 1: 'one'}.sort()  
  7. Traceback (most recent call last):  File "<stdin>", line 1, in <module> 
  8. AttributeError: 'dict' object has no attribute 'sort' 
  9. >>> _ = sorted({2: 'two', 0: 'zero', 1: 'one'}) 
  10. >>>>>> # sort a set 
  11. >>> _ = set([2, 3, 4]).sort() 
  12. Traceback (most recent call last):  File "<stdin>", line 1, in <module> 
  13. AttributeError: 'set' object has no attribute 'sort' 
  14. >>> _ = sorted(set([2, 3, 4])) 

如上面的代碼所示,元組,字典和集合均無法調用sort()函數。實際上,sort()函數是列表對象的實例方法,而不是其他集合對象的實例方法,這意味著此函數僅可用于列表對象。相比之下,元組,字典和集合都可以通過sorted()函數進行排序,因為所有這些數據類型都是可迭代的,因此使其適合使用sorted()函數。

2. 創建列表的便利

第二個原因是sorted()函數將按所需順序對可迭代對象進行排序后將返回一個列表對象。因此,這是構建新列表的便捷方法。但是,sort()函數會更改調用此方法的列表的順序,我們稱此順序為就地排序。此外,此函數隱式返回None(有時,我們可以說,當隱式返回值為None時,它不返回任何內容)。

讓我們考慮以下假設示例。我們從一個名為sales_dict的字典開始,該字典保存全年的銷售記錄。我們要根據銷售額創建一個按降序排列的記錄列表。

  1. >>> # records of sales in a dictionary 
  2. >>> sales_dict = {'Spring': 1000, 'Summer': 950, 'Fall': 1030, 'Winter': 1200} 
  3. >>>>>> # create a list object of sales records 
  4. >>> sales_list0 = sorted(sales_dict.items(), key=lambda x: x[1], reverse=True
  5. >>> sales_list0[('Winter', 1200), ('Fall', 1030), ('Spring', 1000), ('Summer', 950)] 
  6. >>>>>> sales_list1 = list(sales_dict.items())>>> sales_list1.sort(key=lambda x: x[1], reverse=True
  7. >>> sales_list1[('Winter', 1200), ('Fall', 1030), ('Spring', 1000), ('Summer', 950)] 

在上面的代碼中,我們只需要使用sorted()函數編寫一行代碼即可獲得所需的結果。但是,使用sort()函數,我們必須編寫兩行代碼。值得注意的是,由于某人可能會誤認為,我們無法通過使用點符號來組合這兩行來生成所需的列表對象。

  1. >>> # combine the two lines 
  2. >>> sales_list2 = list(sales_dict.items()).sort(key=lambda x: x[1], reverse=True
  3. >>> sales_list2>>> type(sales_list2) 
  4. <class 'NoneType'> 
  5. >>> print(sales_list2) 
  6. None 

如上面的代碼所示,通過組合兩行,我們得到的是None值。這是因為sort()函數的返回值為None,而不是調用該函數的列表對象。

3. 與迭代集成

由于sorted()函數返回列表,而sort()函數返回None,這種區別的含義是什么?好吧,在許多情況下,我們期望有可迭代對象,但沒有NoneType對象。一種這樣的場景是迭代,畢竟這是我們經常使用列表對象執行的一項關鍵操作。

考慮以下示例。我們有兩個字典分別保存第一學期和第二學期的分數。目的是創建一個報告卡,總結每個學生的表現,并按姓名進行排序。

  1. >>> # test results for the first semester 
  2. >>> results1 = {'John': 95, 'Danny': 80, 'Zack': 98} 
  3. >>>>>> # test results for the second semester 
  4. >>> results2 = {'Danny': 84, 'Zack': 95, 'John': 88} 
  5. >>>>>> # generate the report card>>> for name, score in sorted(results2.items()): 
  6. ...     print(f'{name} | Spring: {results1[name]} | Fall: {score}') 
  7. ... Danny | Spring: 80 | Fall: 84 
  8. John | Spring: 95 | Fall: 88 
  9. Zack | Spring: 98 | Fall: 95 

在上面的代碼中,我們注意到這兩個字典都沒有期望的輸出順序,因此,我們將使用sorted()函數對字典進行排序。如您所見,我們可以將排序后的結果直接集成到for循環中,因為sorted()函數返回排序后的列表。

您可能已經預料到,如果我們在這種情況下嘗試使用sort()函數,將會發生什么。請參閱下面的更多細節。

  1. >>> for name, score in list(results2.items()).sort(): 
  2. ...     print(f'{name} | Spring: {results1[name]} | Fall: {score}') 
  3. ... Traceback (most recent call last):  File "<stdin>", line 1, in <module> 
  4. TypeError: 'NoneType' object is not iterable 

總結

在本文中,我們討論了為什么幾乎應該始終使用sorted()函數而不是sort()函數的三個原因。

  • sorted()函數更靈活,因為它可與任何可迭代對象一起使用,這與只適用于列表的sort()函數不同。
  • sorted()函數是創建排序列表的便捷方法。
  • sorted()函數可以方便地與迭代集成。

篇尾思考

最后但并非最不重要的一點是,您可能想知道何時應該考慮使用sort()函數。 對于這個問題,我沒有確切的答案,但是我可以想到的一種情況是,當我們只處理列表對象而又不希望得到返回的列表時。 畢竟,sorted()函數將生成一個新列表,因此,當列表特別大時,使用sorted()函數創建新列表的內存使用效率不高。

考慮簡單的例子。 我們需要對每個嵌套列表進行排序。 在某些情況下,列表可能非常大。 使用sort()函數只會對原始列表進行排序,從而避免創建不必要的新列表對象。

  1. >>> # simplified nested lists; each list can be much larger 
  2. >>> group_scores = [[7, 3, 5], [3, 2, 8], [9, 4, 5]] 
  3. >>> for scores in group_scores: 
  4. ...     scores.sort() 
  5. ... >>> group_scores[[3, 5, 7], [2, 3, 8], [4, 5, 9]] 

原文:

https://medium.com/swlh/3-reasons-why-you-should-almost-always-use-sorted-in-python-9fe122e6ce71

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2014-10-30 13:38:55

編程算法程序員

2010-05-26 15:58:52

MySQL遠程連接

2010-05-10 13:01:03

OracleDBA面試

2010-05-21 09:40:57

MySQL出錯代碼列表

2010-05-25 09:58:43

MySQL數據庫

2010-06-13 11:21:32

MySQL 5.0

2010-07-23 18:39:52

SQL Server游

2010-04-21 17:19:29

Oracle創建

2019-12-10 15:30:27

SaaSIaaS云計算

2010-08-18 11:36:40

DB2簡史

2017-05-17 14:46:22

容器DockerLinux

2010-08-02 11:01:29

DB2 Resotre

2010-05-18 10:34:29

MySQL數據庫備份

2010-05-26 13:14:22

MySQL錯誤解決方案

2010-05-05 11:30:21

2010-09-28 09:42:16

2010-08-18 15:01:08

DB2 9安裝方法

2010-06-12 15:03:55

2010-09-29 17:36:00

管理平臺

2018-01-24 09:52:18

SQL查詢秘訣
點贊
收藏

51CTO技術棧公眾號

大地资源高清播放在线观看| 啦啦啦啦免费高清视频在线观看1| 欧美专区第一页| 欧美亚洲国产一区在线观看网站| 国产成人av资源| 最新精品国产| 99tv成人影院| 黄色网在线播放| 加勒比一区二区三区| 一区二区三区三区在线| 国产精品一区二区久久国产| 国产亚洲美女久久| 欧美中文字幕一区二区三区| 国产性天天综合网| 日韩—二三区免费观看av| 蜜桃a∨噜噜一区二区三区| av资源网在线播放| 在线视频三级| 777久久久精品一区二区三区| 精品国产一区二区三| 欧美孕妇孕交黑巨大网站| 亚洲老司机av| 欧美日韩一二三区| 亚洲免费在线观看视频| 成人中文字幕在线| 亚洲综合电影一区二区三区| 欧美裸体在线版观看完整版| 亚洲精品第一| 爱看av在线| 成年在线观看免费人视频| 二区中文字幕| 日韩精品一区二区三区久久| 亚洲乱码国产乱码精品天美传媒| 成人福利网站在线观看| 亚洲**2019国产| 在线视频欧美日韩| 欧美大片在线观看| 一本到高清视频免费精品| 亚洲色图一区二区三区| 粉嫩嫩av羞羞动漫久久久| 奶水喷射视频一区| 亚洲欧美在线专区| 国产精品免费99久久久| 在线观看视频一区二区三区| 韩日精品一区| 色一区二区三区| 超碰在线免费播放| 六十路在线观看| 中文日本高清免费| 手机视频在线观看| 国产又黄又大又粗视频| 草草草视频在线观看| 亚洲日本无吗高清不卡| 九九九九精品| a级国产乱理论片在线观看99| 国产91亚洲精品| 国精产品一区一区三区有限在线| 中文字幕精品网| 日韩精品999| 亚洲精品一区二区三区福利| 日韩一区二区影院| 欧美精品电影在线播放| 欧美综合亚洲图片综合区| 偷拍日韩校园综合在线| 亚洲一区二区三区爽爽爽爽爽| 国产偷v国产偷v亚洲高清| 99久久99久久精品国产片果冻| 国产一区二区三区久久悠悠色av| 青草国产精品久久久久久| 国产欧美69| 国产午夜精品一区二区三区欧美| 黄色欧美日韩| 伊人久久大香线蕉av超碰演员| 日韩理论电影大全| 亚洲素人在线| 国模精品一区| 国产精品免费大片| 精品久久精品| 久久国产影院| 久久久久国产精品| 欧美日韩hd| 亚洲高清在线| 一本色道88久久加勒比精品| 国产农村妇女毛片精品久久莱园子 | a天堂中文在线官网| 裸体av在线| 轻轻色免费在线视频| 天堂中文在线8| 国产一二三区在线| 在线观看a视频| 操你啦视频在线| 国产精品xx| 欧洲一级精品| 麻豆国产一区| 自拍偷拍一区| 欧美激情黄色片| 亚洲国内欧美| 日本va欧美va精品发布| 国产精品12区| 国产三区在线成人av| 日韩毛片视频在线看| 亚洲国产aⅴ天堂久久| 在线日韩一区二区| 日韩精品一区在线观看| 亚洲视频欧美视频| 欧美激情综合亚洲一二区| 国产成人av网址| 99精品国产一区二区| 亚洲高清视频在线观看| 久久久久久人妻一区二区三区| 免费激情视频在线观看| 特黄特色大片免费视频大全| 成年人视频在线观看免费| aaa大片在线观看| 日本精品裸体写真集在线观看| 综合久久成人| 亚洲精品成人| 蓝色福利精品导航| 久久久高清一区二区三区| 香蕉加勒比综合久久| 日韩一区二区在线看| 日韩专区中文字幕| 国产精品三级久久久久久电影| 精品欧美一区二区在线观看视频 | 欧美一级电影在线| 91精品国产高清久久久久久91裸体| 久久成人资源| 水蜜桃色314在线观看| 91视频免费版污| 欧美xxx.com| 美女在线视频免费| 久久99精品久久久久久欧洲站| 亚洲蜜桃视频| 国产精品一区二区在线观看不卡 | 国产情人综合久久777777| 亚洲国产精品久久人人爱| 欧美丰满美乳xxx高潮www| 亚洲最新av在线| 国产精品国产三级国产aⅴ9色| 欧美h视频在线| 欧美 日韩 国产在线观看| 在线国产福利| 变态调教一区二区三区| 波多野结衣一区二区三区免费视频| 欧美.www| 91污片在线观看| 色综合久久天天| 亚洲欧美制服丝袜| 国产精品美女网站| 黄色免费高清视频| 能在线观看av网站| 91探花在线观看| 日韩理论电影中文字幕| 日韩制服丝袜av| 国产精品久久久久天堂| 日韩精品一区二区三区视频播放 | 日韩一区二区在线看| 欧美老女人在线视频| 国产精品午夜av在线| 亚洲精品无码久久久久久| 成人h小游戏| 亚洲国产中文在线| 亚洲视频播放| 国产精品毛片久久久久久久| 日韩一区二区三区免费看| 欧美在线xxx| 经典三级在线视频| 免费在线观看一级毛片| 96视频在线观看欧美| 久久国产成人| 一区二区三区蜜桃| 中文字幕亚洲欧美一区二区三区 | 欧美国产激情18| 欧美极品一区二区| 午夜神马福利影院| 第四色男人最爱上成人网| 一区二区免费不卡在线| xfplay精品久久| 精品三级av在线| 国产美女精彩久久| 国内自拍在线观看| 黄色免费网站在线观看| 天天操综合520| 国产成人av一区二区三区在线观看| 欧美在线观看18| 欧洲精品久久久| 人体内射精一区二区三区| 91在线视频| 欧美美女视频| 国产日韩欧美高清| 亚洲免费电影一区| 久久波多野结衣| 在线观看中文字幕| 久久久久观看| 成人免费视频app| 精品免费99久久| 99视频日韩| 久草在线在线| 精品五月天堂| 99re视频这里只有精品|