列表的sort()和sorted()方法


sort()與sorted()的不同在於,sort是在原位重新排列列表,而sorted()是產生一個新的列表。

sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。

注:sorted不是列表方法。

1.sort()方法

sort函數的原型

  sort(key=None, reverse=False)

  key 可指定一些規則,可以是k=int, k =len , k=function函數

  reverse 默認值是False

  可以給它賦值成True,那就是反向排序

簡單的列表排序

l = [1,7,4,9,2,3,5,0,8,6]
l.sort()
print(l)
結果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

#類表中嵌套其他數據類型,如字典

# a = [{'id':1,'name':'小明'},{'id':3,'name':'小紅'},{'id':2,'name':'老王'}]
# 根據字典的key值id進行降序排序並輸出排序后的列表。

def function(date):
    print(date)
    print(date['id'])
    return date['id']
a.sort(key=function)
print(a)
#結果:[{'id': 1, 'name': '小明'}, {'id': 2, 'name': '老王'}, {'id': 3, 'name': '小紅'}]


##################簡化版#################

a.sort(key=lambda keys: keys['id'])
print(a)


s = sorted(a, key=lambda keys: keys['id'])
print(s)

按照字符串排序

StrList = ['fb', 'bx', 'csw', 'qb', 'qqa', 'eeeed']
# 一般字典序排列,但是大寫在前,小寫在后!!
StrList.sort()
print(StrList) ##字符串列表是按照第一個字符的大小排序的
##輸出:['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']

#忽略大小寫,按abcd順序
StrList.sort(key=str.lower)
print(StrList) ##輸出:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']

#按照字符串長度排序
StrList.sort(key=len)
print(StrList)##輸出:['is', 'is', 'fast', 'Fast', 'Smooth', 'smooth']

StrList.sort(key=len, reverse=True)#反序
print(StrList) ##輸出:['Smooth', 'smooth', 'fast', 'Fast', 'is', 'is']

eg:

假設用元組保存每一個學生的信息,包括學號,姓名,年齡。用列表保存所有學生的信息。
 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函數

  

2.sorted()方法

  返回一個新列表,其中包含按升序排列的iterable中的所有項。可以提供自定義鍵函數來自定義排序順序,以及可以將反轉標志設置為按降序請求結果。

*****

 sorted(L)返回一個排序后的L,不改變原始的L;

L.sort()是對原始的L進行操作,調用后原始的L會改變,沒有返回值。【所以a = a.sort()是錯的啦!a = sorted(a)才對!

sorted()適用於任何可迭代容器,list.sort()僅支持list(本身就是list的一個方法)

*****

# a = [{'id':1,'name':'小明'},{'id':3,'name':'小紅'},{'id':2,'name':'老王'}]
# 根據字典的key值id進行降序排序並輸出排序后的列表。

a = [{'id':1,'name':'小明'},{'id':3,'name':'小紅'},{'id':2,'name':'老王'}]

s=sorted(a, key=lambda keys: keys['id'])
print(s)
print(a)

對於同樣一個無序的列表a,調用sorted(a),對a進行排序后返回一個新的列表,而對a不產生影響。

對於一個無序的列表a,調用a.sort(),對a進行排序后返回a,sort()函數修改待排序的列表內容。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM