python中sort排序與sorted排序
阿新 • • 發佈:2019-01-14
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'}] # 列表中的字典排序