網站首頁 編程語言 正文
對于Python內置函數sorted(),先拿來跟list(列表)中的成員函數list.sort()進行下對比。在本質上,list的排序和內建函數sorted的排序是差不多的,連參數都基本上是一樣的。
主要的區別在于,list.sort(
)是對已經存在的列表進行操作,進而可以改變進行操作的列表。而內建函數sorted返回的是一個新的list,而不是在原來的基礎上進行的操作.
再來,讓我們用Python自帶的幫助函數help()看看對于sorted()是怎么定義的:
?>>>help(sorted) ? ?Help on built-in function sorted in module builtins: ?sorted(iterable, key=None, reverse=False) ? ? ?Return a new list containing all items from the iterable in ascending order. ? ? ? ? ? ?A custom key function can be supplied to customise the sort order, and the ? ? ?reverse flag can be set to request the result in descending order.
要先說明的是, 本人用的Python版本為3.5, 所以會跟Python2的有變差。
由幫助可以看到,傳進去一個可迭代的數據,返回一個新的列表,注意,是新的列表!來看看看實例吧:
>>>g=[1,4,6,8,9,3,5] >>>sorted(g) Out[30]: [1, 3, 4, 5, 6, 8, 9] >>>sorted((1,4,8,9,3,6)) Out[33]: [1, 3, 4, 6, 8, 9] >>>sorted('gafrtp') Out[35]: ['a', 'f', 'g', 'p', 'r', 't']
由以上可以看到,只要是可迭代對象數據,都能夠進行排序,生成一個排序后的列表。
如果想要排逆序呢?很簡單,只要將可選參數reverse設置為True即可:
?>>>sorted((1,4,8,9,3,6), reverse=True) ?Out[36]: [9, 8, 6, 4, 3, 1]
高級用法:
有時候,我們要處理的數據內的元素不是一維的,而是二維的甚至是多維的,那要怎么進行排序呢?這時候,sorted()函數內的key參數就派上用場了!從幫助信息上可以了解到,key參數可傳入一個自定義函數。
那么,該如何使用呢?讓我們看看如下代碼:
>>>l=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)] >>>sorted(l, key=lambda x:x[0]) Out[39]: [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)] >>>sorted(l, key=lambda x:x[0], reverse=True) Out[40]: [('e', 3), ('d', 4), ('c', 6), ('b', 2), ('a', 1)] >>>sorted(l, key=lambda x:x[1]) Out[41]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)] >>>sorted(l, key=lambda x:x[1], reverse=True) Out[42]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]
這里,列表里面的每一個元素都為二維元組,key參數傳入了一個lambda
函數表達式,其x就代表列表里的每一個元素,然后分別利用索引返回元素內的第一個和第二個元素,這就代表了sorted()
函數利用哪一個元素進行排列。而reverse參數就如同上面講的一樣,起到逆排的作用。默認情況下,reverse參數為False。
當然,正如一開始講到的那樣,如果想要對列表直接進行排序操作,可以用成員方法sort()來做:
>>>l.sort(key=lambda x : x[1]) >>>l Out[45]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)] >>>l.sort(key=lambda x : x[1], reverse=True) >>>l Out[47]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]
對于三維及以上的數據排排序,上述方法同樣適用。
原文鏈接:https://www.cnblogs.com/brad1994/p/6697196.html
相關推薦
- 2022-09-15 Android?Jetpack庫剖析之ViewModel組件篇_Android
- 2022-11-08 go按行讀取文件的三種實現方式匯總_Golang
- 2022-10-29 python實現k均值聚類(kMeans)基于numpy
- 2021-12-24 OpenCV?reshape函數實現矩陣元素序列化_C 語言
- 2022-11-20 C++?右值引用與?const?關鍵字詳解_C 語言
- 2022-09-13 Golang優雅保持main函數不退出的辦法_Golang
- 2022-07-20 C語言開發中的常見錯誤詳解_C 語言
- 2022-11-23 Android移除Message的方法分享_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支