1. 程式人生 > >python排序函式sort()與sorted()區別

python排序函式sort()與sorted()區別

python排序函式sort()與sorted()區別

sort是容器的函式:sort(cmp=None, key=None, reverse=False)

sorted是python的內建函式:sorted(iterable, cmp=None, key=None, reverse=False)

引數解析:

cmp:比較函式,比較什麼引數由key決定。例如:cmp(e1, e2) 是具有兩個引數的比較函式,返回值:負數(e1 < e2);0(e1 == e2);正數( e1 > e2)。
key:用列表元素的某個屬性或函式作為關鍵字。
reverse:排序規則,可以選擇True或者False。
sorted多一個引數iterable:待排序的可迭代型別的容器

# -*- coding: utf-8 -*-
import numpy as np
a=[1,2,5,3,9,4,6,8,7,0,12]
a.sort()
print(a)
print("\n")
a=[1,2,5,3,9,4,6,8,7,0,12]
print(sorted(a))
print(a)
print("\n")

輸出結果 

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
[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()
print(list1)
print("\n")
list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1))
print(list1)

 小結:由示例可以看出,當列表由list(或者tuple)組成時,預設情況下,sort和sorted都會根據list[0](或者tuple[0])作為排序的key,進行排序。

以上都是預設的排序方式,我們可以編寫程式碼控制兩個函式的排序行為。主要有兩種方式:基於key函式;基於reverse函式

1)基於key函式排序

list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
list1.sort(key=lambda x:x[2])
print(list1)
print("\n")
list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1,key=lambda x:x[2]))
print(list1)

輸出結果

[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]


[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

 

2)基於reverse函式

a=[1,2,5,3,9,4,6,8,7,0,12]
a.sort(reverse=True)
print(a)
a=[1,2,5,3,9,4,6,8,7,0,12]
a.sort(reverse=False)
print(a)

輸出結果

[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

reverse=False為升序排序;reverse=True為降序排序
--------------------- 
作者:故鄉月zyl 
來源:CSDN 
原文:https://blog.csdn.net/zyl1042635242/article/details/43115675 
版權宣告:本文為博主原創文章,轉載請附上博文連結!