1. 程式人生 > >python中sort排序與sorted排序

python中sort排序與sorted排序

sort排序
sort排序結果會影響本身結構
例:

a = [2,13,7,34]
a.sort()
print(a)  # [2, 7, 13, 34]
b = a.sort()  # 錯誤寫法

如果需要一個排序好的列表,同時保持原列表不變,怎麼實現呢?

a = [2,13,7,34]
b = a[:]
b.sort()
print(a)  # [2, 13, 7, 34]
print(b)  # [2, 7, 13, 34]
或者
a = [2,13,7,34]
b = sorted()
print(a)  # [2, 13, 7, 34]
print(b)  # [2, 7, 13, 34]

sort的可選引數
sort方法還有兩個可選引數:key和reverse

1、key在使用時必須提供一個排序過程總呼叫的函式:

x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print (x) # ['m', 'mm', 'mm', 'mmm']

2、reverse實現降序排序,需要提供一個布林值:

y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print (y) #[8, 3, 2, 1, 0]

True為倒序排列,False為正序排列
sorted排序
sorted排序不會影響本身的結構
sorted返回一個有序的副本,並且型別總是列表,如下:

print (sorted('Python')) #['P', 'h', 'n', 'o', 't', 'y']

其他情況:

b = ['aa','BB','bb','zz','CC'] 
print(sorted(b)) 
['BB', 'CC', 'aa', 'bb', 'zz']    #按列表中元素每個字母的ascii碼從小到大排序,如果要從大到小,請用sorted(b,reverse=True)下同 
     
c =['CCC', 'bb', 'ffff', 'z']  
print(sorted(c,key=len))             #按列表的元素的長度排序 
['z', 'bb', 'CCC', 'ffff'] 
     
d =['CCC', 'bb', 'ffff', 'z'] 
print(sorted(d,key = str.lower ))    #將列表中的每個元素變為小寫,再按每個元素中的每個字母的ascii碼從小到大排序 
['bb', 'CCC', 'ffff', 'z']

字典及列表中的字典排序

a = {'a': 23, 'b': 25,'c': 125, 'd': 10, 'e': 32, 'f': 9}
print(sorted(a.items(),key=lambda item:item[1]))
# [('f', 9), ('d', 10), ('a', 23), ('b', 25), ('e', 32), ('c', 125)]  # 排序完成後為列表中的元組


f = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}]     #列表中的元素為字典 
f1 = sorted(f,key = lambda x:x['age'])
print(f1)
# [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}]  # 列表中的字典排序