⑴ python 列表排序sort和sorted使用
Python的列表排序提供了sort和sorted兩種方法,它們的主要區別和使用方式如下:
sort方法:
sorted方法:
總結: 若需要直接修改原列表,並不關心返回值,可以選擇sort方法。 若需要保持原列表不變,並獲取一個新的排序後的列表,可以選擇sorted方法。 兩者都支持通過key和reverse參數來自定義排序規則。
⑵ 你真的明白了Python中sort()和sorted()的區別了嗎
1、sort 與 sorted 區別
① sort 是應用在 list 上的方法,屬於列表的成員方法,sorted 可以對所有可迭代的對象進行排序操作。
② list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。
③ sort使用方法為ls.sort(),而sorted使用方法為sorted(ls)。
通過代碼,簡單解釋sort()與sorted()的區別:
在開始使用Python進行排序之前,首先需要了解如何對數值和字元串數據進行排序,包括列表、元組以及集合有一個基礎的理解。因為下文的講解中會用到這些數據結構,並進行一些基礎的操作。
2、sort()的理解使用
sort() 函數用於對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數。
語法如下:
參數:
cmp – 可選參數,如果指定了該參數會使用該參數的方法進行排序。
key – 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse – 排序規則,reverse = True 降序, reverse = False 升序(默認)。
返回值:
該函數沒有返回值,但會對數組/列表進行排序;
示例:
需要注意的地方:
① cmp作為sort()參數使用(python2中使用,python3已棄用)
② python3中也取消了函數傳入機制,可以構造排序函數遞給key實現。
示例:
或者自定義函數傳入:
演算法中的應用:
例:把數組排成最小的數
輸入一個正整數數組,把數組里所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則列印出這三個數字能排成的最小數字為321323。
3、sorted()的理解使用
sorted() 函數對所有可迭代的對象進行排序操作
語法如下:
參數說明:
iterable – 可迭代對象。
cmp – 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。(一般省略)
key – 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
常用的用來作為參數key的函數有 lambda函數和operator.itemgetter() 尤其是列表元素為多維數據時,需要key來選取按哪一位數據來進行排序
reverse – 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回值
返回重新排序的列表;
需要注意:列表的元素可以是多樣的,返回列表的形式與輸入列表的形式一致。
元組和集合同樣可以使用sorted()函數!
值得注意的是: 即使輸入的是一個集合和元組,輸出結果仍然是一個列表,因為sorted()函數根據定義會返回一個新列表,如果返回的對象需要匹配輸入類型,則可以將其轉化為新類型。 如果試圖將結果列表轉換回集合類型,請注意,按照定義而言,集合是無序的。
Python數據類型模塊列表、元祖、集合、字典的基礎使用還不太牢固的新手可利用下方的直播課復習鞏固↓↓
1)一般用法
當元素為一維數字或字母時,結果返回一個新的列表,其中元素按升序或降序排列(根據reverse參數來決定)。
2)各類使用舉例
例1:正序排序
例2:逆序排序
例3:根據字元長短進行排序
例4:和lambda()函數配合使用
例5:對列表中的元素進行排序,key比較
例6:sorted() 用於字典dictionary
字典排序
① 返回的是排序後的key
② 對字典進行排序,需將字典通過items()轉換為元組列表
③ sorted()函數默認對字典的key值進行排序
輸出:[(『hu』, 2), (『li』, 2), (『pan』, 7), (『wang』, 4), (『zhang』, 4)]
輸出:[(『zhang』, 4), (『wang』, 4), (『pan』, 7), (『li』, 2), (『hu』, 2)]
④ 如果想要對字典的value值進行排序,可以設置key參數
輸出:[(『pan』, 7), (『zhang』, 4), (『wang』, 4), (『li』, 2), (『hu』, 2)]
⑤ 嵌套排序
先對字典的value值進行降序排序,value值相同,對相同value值的key值進行降序排序。
輸出:[(『pan』, 7), (『zhang』, 4), (『wang』, 4), (『li』, 2), (『hu』, 2)]
3)sorted()函數四種重要的特性
1)sorted()函數不需要定義,它是一個內置函數,可以在標準的Python安裝中使用。
2)在沒有額外的參數的情況下,sorted()函數按照升序對值進行排列,也就是按照從小到大的順序。
3)原始的numbers不會改變,因為sorted()函數提供了一個新的有序的輸出結果,並且不改變原始值的順序。
4)當sorted()函數被調用時,它會提供一個有序的列表作為返回值。
最後一點意味著列表可以使用sorted()函數,並且輸出結果可以立刻賦值給一個變數。
4、sort()和sorted()高級排序技巧(key的使用)
1)排序基礎
簡單的升序排序只需要調用sorted()方法,它返回一個新的list,新的list的元素基於小於運算符(lt)來排序。
也可以使用list.sort()方法來排序,此時list本身將被修改,通常這種方法不如sorted()方便,但如果你不需要保留原來的list,這種方法更有效。
另一個不同就是list.sort()方法僅被定義在list中,相反地sorted()方法對所有的可迭代序列都有效。
2)key參數/函數
例如通過key指定的函數來忽略字元串的大小寫:
key參數的值為一個函數,此函數只有一個參數且返回一個值用來進行比較。
更廣泛的使用情況是用復雜對象的某些值來對復雜對象的序列排序,例如
同樣的技術對擁有命名屬性的復雜對象也適用
3)Operator 模塊函數
operator模塊有itemgetter,attrgetter,從2.6開始還增加了methodcaller方法。
4)升序和降序
list.sort()和sorted()都接受一個參數reverse(True or False)來表示升序或降序排序。
例如對上面的student降序排序
5)排序的穩定性和復雜排序
多個元素如果有相同的key,則排序前後他們的先後順序不變。
注意在排序後』blue』的順序被保持了,即』blue』, 1在』blue』, 2的前面。
更復雜的你可以構建多個步驟來進行更復雜的排序,例如對student數據先以grade降序排列,然後再以age升序排列。