咱們須要對List進行排序,Python提供了兩個方法對給定的List L進行排序 :
方法1.用對List的成員函數sort進行排序
方法2.用內置函數sorted進行排序(從2.4開始)html
-------------------------------------------------sorted--------------------------------------------------------python
sorted() 函數對全部可迭代的對象進行排序操做
>>> help(sorted)函數
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)post
Return a new list containing all items from the iterable in ascending order.ui
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.url
--------------------------------------------------sort---------------------------------------------------------spa
sort() 函數用於對原列表進行排序,若是指定參數,則使用比較函數指定的比較函數
>>> help(list.sort)
Help on method_descriptor:.net
sort(...)
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*code
----------------------------------------------參數說明-----------------------------------------------------htm
原型:sort(key,reverse=False)
key:用來指定一個函數,此函數在每次元素比較時被調用,此函數表明排序的規則,也就是你按照什麼規則對你的序列進行排序;
reverse:是用來代表是否逆序,默認的False狀況下是按照升序的規則進行排序的,當reverse=True時,便會按照降序進行排序。
注;通常來講,cmp和key能夠使用lambda表達式
sort()與sorted()的不一樣在於,sort是在原位從新排列列表,而sorted()是產生一個新的列表。
sort 是應用在 list 上的方法,sorted 能夠對全部可迭代的對象進行排序操做。
list 的 sort 方法返回的是對已經存在的列表進行操做,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操做。
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a
[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]
區別:
對於一個無序的列表a,調用a.sort(),對a進行排序後返回a,sort()函數修改待排序的列表內容。
而對於一樣一個無序的列表a,調用sorted(a),對a進行排序後返回一個新的列表,而對a不產生影響。
假設用元組保存每個學生的信息,包括學號,姓名,年齡。用列表保存全部學生的信息。
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort()
>>> list1
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1)
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
小結:
由示例能夠看出,當列表由list(或者tuple)組成時,默認狀況下,sort和sorted都會根據list[0](或者tuple[0])做爲排序的key,進行排序。
以上都是默認的排序方式,咱們能夠編寫代碼控制兩個函數的排序行爲。主要有三種方式:基於key函數;基於cmp函數和基於reverse函數
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort(key=lambda x:x[2])
>>> list1
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1, key=lambda x:x[2])
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=True)
>>> a
[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.sort(reverse=True)
小結:reverse=False爲升序排序(默認);reverse=True爲降序排序