1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python sort()和sorted()函数区别及用法详解

Python sort()和sorted()函数区别及用法详解

时间:2023-02-11 20:10:46

相关推荐

Python sort()和sorted()函数区别及用法详解

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()>>>Nonea>>>[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 itemgetterL2 = 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 = {'Linda': '7750', 'Bob': '9345', 'Carol': '5834'}from operator import itemgettersorted_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 = [{"name":"Bob", "wins":10, "losses":3, "rating":75.00},{"name":"David", "wins":3, "losses":5, "rating":57.00},{"name":"Carol", "wins":4, "losses":5, "rating":57.00},{"name":"Patty", "wins":9, "losses":3, "rating": 71.48}]from operator import itemgettersorted_ed = sorted(gameresult, key=itemgetter("rating", "name"))print(sorted_ed)---[{'name': 'Carol', 'wins': 4, 'losses': 5, 'rating': 57.0}, {'name': 'David', 'wins': 3, 'losses': 5, 'rating': 57.0},{'name': 'Patty', 'wins': 9, 'losses': 3, 'rating': 71.48}, {'name': 'Bob', 'wins': 10, 'losses': 3, 'rating': 75.0}]

不使用模块,只通过wins进行排序

a = sorted(gameresult,key=lambda x:x["wins"])print(a)---[{'wins': 3, 'losses': 5, 'name': 'David', 'rating': 57.0}, {'wins': 4, 'losses': 5, 'name': 'Carol', 'rating': 57.0},{'wins': 9, 'losses': 3, 'name': 'Patty', 'rating': 71.48}, {'wins': 10, 'losses': 3, 'name': 'Bob', 'rating': 75.0}]

字典中混合list排序

mydict = {'Li': ['M', 7], 'Zhang': ['E', 2],'Wang': ['P', 3], 'Du': ['C', 2],'Ma': ['C', 9], 'Zhe': ['H', 7]}from operator import itemgettersorted_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])

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。