**sorted函數**
sorted 在Python3.5 中的源碼,只摘錄了下面咱們比較關注的部分
~~~
def sorted(*args, **kwargs): # real signature unknown
"""
默認返回一個包含所有排序元素的升序列表
Return a new list containing all items from the iterable in ascending order.
支持自定義鍵值方法的排序,并且可以設置逆序的標志將結果逆序。
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
"""
pass
~~~
排序在我們程序開發中是經常用到的功能。無論使用何種排序算法,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果不是數字呢?直接比較數學上的大小就沒有意義了,因此,比較的過程必須通過函數抽象出來。
Python 內置的 sorted 方法對列表排序是非常強大的,我們通過下面幾個例子來簡單了解下。
實例 1:直接對數字列表排序
~~~
>>> sorted([2,3,1,-1,0])
[-1, 0, 1, 2, 3]
~~~
實例 2:自定義鍵值排序
~~~
>>> sorted([2,3,1,-1,0],key=abs)
[0, 1, -1, 2, 3]
~~~
分析:sorted() 作為高階函數,還可以接收一個 key 函數來實現自定義的排序,例如按絕對值大小排序,求絕對值的函數會作用在列表的每個元素上形成新的列表 keys,新的列表作為排序的依據,進行排序
~~~
原數據 [ 2 , 3 , 1 , -1 , 0 ]
keys [ 2 , 3 , 1 , 1 , 0 ]
~~~
按照 keys 進行升序排
~~~
keys排序 [ 0 , 1 , 1 , 2 , 3 ]
最終結果 [ 0 , 1 , -1 , 2 , 3 ]
~~~
實例 3:自定義鍵值排序并逆序
~~~
>>> sorted([2,3,1,-1,0],key=abs,reverse=True)
[3, 2, 1, -1, 0]
~~~
實例 4 : 對字符串排序
~~~
>>> sorted(['airvip','lucy','Pytohon','php'])
['Pytohon', 'airvip', 'lucy', 'php']
~~~
分析:默認情況下,對字符串排序,是按照 ASCII 碼表的大小比較的,因為大寫字母在小寫字母前,所以大寫字母開頭的會排在小寫字母開頭的前面。
實例 5 :對列表中的元組按照元組的第二個值排序
~~~
>>> L = [('b',1),('a',2),('d',3),('c',3)]
>>> sorted(L,key=lambda x:x[1])
[('b', 1), ('a', 2), ('d', 3), ('c', 3)]
~~~
我們看到,現在只是按照元組的第二個值排序,但我們還想按照元組中的第一個值排序,就需要
~~~
>>> sorted(L,key=lambda x:(x[1],x[0]))
[('b', 1), ('a', 2), ('c', 3), ('d', 3)]
~~~
- 跟老司機學Python
- 了解Python
- 1、python簡介
- 2、Python發展史
- 3、Python特點
- 4、Python解釋器
- 入坑Python
- 1、Python環境搭建
- 2、設置環境變量
- 3、開始使用Python
- 4、運行Python程序
- 掌握Python基礎
- Python基礎知識
- Python運算符
- 算術運算符
- 比較運算符
- 賦值運算符
- 邏輯運算符
- 位運算符
- 成員運算符
- 身份運算符
- 運算符優先級
- Python的變量與常量
- Python數據類型
- Number數值
- String字符串
- List列表
- Tuple元組
- Dictionary字典
- Set集合
- Python流程控制語句
- 條件判斷
- 循環控制
- Python函數
- 1、函數是什么
- 2、函數的定義
- 3、函數的參數
- 4、函數的調用
- 5、嵌套函數
- 6、遞歸函數
- 7、匿名函數
- 8、函數式編程
- 9、高階函數
- 1、map
- 2、reduce
- 3、filter
- 4、sorted
- 10、返回函數
- 11、偏函數
- Python文件IO操作
- 標準輸入輸出
- 讀寫文件
- with讀寫文件
- Python高級特性
- 1、列表生成式
- 2、迭代器
- 3、生成器
- 4、裝飾器
- Python模塊初探
- 1、模塊與包
- 2、創建模塊
- 3、模塊中的作用域
- 4、模塊的導入
- Python面向對象編程
- 類與對象
- 類的定義及使用
- 面向對象特性
- 類中的訪問域
- 查看對象詳情
- Python面向對象進階
- 類中的方法
- 類中的特殊成員
- 限制對象的屬性
- 再聊多繼承
- 裝x式創建類
- 創建元類
- Python內置模塊
- os模塊
- sys模塊
- random模塊
- time模塊
- datetime模塊
- shutil模塊
- collections模塊
- base64模塊
- json模塊
- hashlib模塊
- xml模塊
- 1. SAX解析XML
- 2. DOM解析XML
- 3. ElementTree解析XML
- urllib模塊
- logging模塊
- re模塊
- Python第三方模塊
- Pillow與PIL
- Requests
- Tablib
- Xpinyin
- Chardet
- Pycurl
- Virtualenv
- Python操作數據庫
- Mysql操作
- Sqllite操作
- Mongodb操作
- Redis操作
- Python的GUI編程
- Python中GUI的選擇
- Tkinter
- wxPython
- Socket網絡編程
- Socket網絡編程簡聊
- Socket內建方法
- TCP協議編程
- UDP協議編程
- TCP與UDP
- Python電子郵件
- SMTP發郵件
- POP3收郵件
- IMAP收郵件
- 進程線程
- 進程與線程
- 進程編程
- 使用進程池
- 進程間的通信
- 線程編程
- 使用線程鎖
- Python的GIL
- Web編程
- WSGI介紹
- Web框架
- Flask使用
- 模板jinjia2使用
- 項目結構規劃
- 異步與協程
- 概念掃盲
- 異步IO進化之路
- 協程是什么
- yield協程編程
- yield from
- asyncio
- async與await
- aiohttp之client
- aiphttp之server
- 網絡爬蟲
- 網絡爬蟲簡聊
- Beautiful Soup模塊的使用
- pyquery 模塊的使用
- selenium模塊的使用
- 爬取段子實例
- 錯誤與調試
- 錯誤
- 錯誤處理
- 拋出錯誤
- 高效的調試
- Python重要語句
- pass語句
- return語句
- Python開發必知
- pip使用詳解
- 如何對列表進行迭代
- 如何對字典進行迭代
- 字符串格式化
- 知識擴展
- 網絡模型
- GUI是什么