sorted()屬於內建函式,作用於任意可迭代的物件,sorted() 函式總是會返回乙個排序後的列表,原有列表保持不變
sort()一般作用於列表,屬於列表的成員函式,它會直接修改原有列表,函式返回為 none。sort()函式總體來說不需要複製原有列表,所以消耗記憶體比較小,效率也比較高
a=['1',1,'a',3,7,'n']sorted(a)
>>>[1, 3, 7, '1', 'a', 'n']
a>>>['1', 1, 'a', 3, 7, 'n']
print a.sort()
>>>none
a>>>[1, 3, 7, '1', 'a', 'n']
a = ['fsf','dadef','f''gt','frggr']a.sort(key=len)
print(a)
>>>['fsf', 'fgt', 'dadef', 'frggr']
注:如果實際應用中需要儲存原列表,使用 sorted() 函式較為適合,否則可以選擇 sort() 函式,因為sort() 函式不需要複製原有列表,消耗的記憶體較少,效率也較高。
key 指定的函式將作用於 list 的每乙個元素上,並根據 key 函式返回的結果進行排序sorted([36, 5, -12, 9, -21], key=abs)
---[5, 9, -12, -21, 36]
sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower)
---['about', 'bob', 'credit', 'zoo']
要進行反向排序,不必改動key函式,可以傳入第三個引數 reverse=true :
sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower,reverse=true)
---['zoo', 'credit', 'bob', 'about']
對於sorted()函式,他可以對不同的資料結構進行排序:
operator.itemgetter函式
operator模組提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號(即需要獲取的資料在物件中的序號)
from operator import itemgettera = [1,2,3,4]
b=itemgetter(3,0) //定義函式b,獲取物件的第3個域和第0個的值
print(b(a))
---(4, 1)
# 注意operator.itemgetter函式獲取的不是值,而是定義了乙個函式,通過該函式作用到物件上才能獲取值。
# 基礎版
l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]from operator import itemgetter
l2 = sorted(l, key= itemgetter(0))
print(l2)
或者:l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]
a = sorted(l, key=lambda x: x[0])
print(a)
---[('adam', 92), ('bart', 66), ('bob', 75), ('lisa', 88)]
# 對字典進行排序
phonebook =from operator import itemgetter
sorted_ed = sorted(phonebook.items(), key=itemgetter(0))
print(sorted_ed)
---[('bob', '9345'), ('carol', '5834'), ('linda', '7750')]
# 對多維list進行排序
from operator import itemgettergameresult = [['bob', 95.00, 'a'], ['alan', 86.0, 'c'],
['mandy', 82.5, 'a'], ['rob', 86, 'e']]
sorted_ed = sorted(gameresult , key=itemgetter(2, 1))
print(sorted_ed)
---[['mandy', 82.5, 'a'], ['bob', 95.0, 'a'], ['alan', 86.0, 'c'], ['rob', 86, 'e']]
# list中混合字典排序,按照 rating 和 name進行排序的實現方法
gameresult = [,, ,]from operator import itemgetter
sorted_ed = sorted(gameresult, key=itemgetter("rating", "name"))
print(sorted_ed)
---[, ,
, ]
# 不使用模組,只通過wins進行排序
a = sorted(gameresult,key=lambda x:x["wins"])print(a)
---[, ,
, ]
# 字典中混合list排序
mydict =from operator import itemgetter
sorted_ed = sorted(mydict.items(), key=itemgetter(1))
print(sorted_ed)
---[('du', ['c', 2]), ('ma', ['c', 9]), ('zhang', ['e', 2]), ('zhe', ['h', 7]), ('li', ['m', 7]), ('wang', ['p', 3])
sort函式和sorted函式
b 1 2,6 2,7 9,5 print b.sort reverse true print b 1 none 7結果表明sort函式不會產生新列表,返回值為none 會改變原來物件的結構 b 1 2,6 2,7 9,5 c set b print b print c print list sor...
Python中sorted()和sort()區別
sorted 和sort 區別 sort 是應用在 list 上的方法,sorted 可以對所有可迭代的物件進行排序操作。list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函式 sorted 方法返回的是乙個新的 list,而不是在原來的基礎上進行的操作。sorted語法...
sort與sorted函式排序的區別
python list內建sort 方法用來排序,也可以使用python內建的全域性sorted 方法對可迭代的序列排序生成新的序列。sort 函式 首先看乙個例子 lis1 3 5,6 8,9 lis1.sort print lis1 使用sort 方法對list排序會修改list本身,不會返回新...