sort 和sorted 函式區別及用法詳解

2022-03-23 09:23:01 字數 3098 閱讀 3093

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 itemgetter

a = [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 itemgetter

gameresult = [['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本身,不會返回新...