python内置排序函数sorted,可以适用于所有可迭代的对象。而类型自有的sort函数只适用于类型本身。例如list.sort(),只适用于列表类型。另外,sort函数是在原来列表上直接进行排序,而sorted函数则是返回一个排序之后的列表。
sort(self, /, *, key=None, reverse=False) # list类的sort方法原型 sorted(iterable, /, *, key=None, reverse=False) # sorted方法原型
其中参数/和*是python3.8之后新增的语法,详情见Python函数。它们不需要我们传递,我们只关心self(iterable),key,reverse这三个参数即可。
iterable | 可迭代对象 |
key | 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序 |
reverse | 排序规则,reverse = True 降序 , reverse = False 升序(默认升序) |
L = [12, 23, 32, 1, 45, 18, 10, 22] L.sort() # 原地排序 print(L)
D = {'a': 1, 'x': 2, 'c': 3} key_sort = sorted(D.keys()) # 对字典键进行排序,返回列表对象 print(key_sort)
str_list:list = ['123', '1', '1234', '12', '234'] str_list = sorted(str_list, key=lambda x:len(x)) # 根据字符串长度进行排序 print(str_list)
medal = [["中国", 9, 4, 2], ["美国", 8, 10, 7], ["英国", 1, 1, 0], ["法国", 5, 7, 2], [ "俄罗斯奥委会", 6, 12, 14]] medal_tally = sorted(medal, key=lambda x:sum(x[1:])) # 奖牌总数榜 print(medal_tally) gold_medal = sorted(medal, key=lambda x:x[1]) # 金牌榜 print(gold_medal) silver_medal = sorted(medal, key=lambda x:x[2]) # 银牌榜 print(silver_medal) copper_medal = sorted(medal, key=lambda x:x[3]) # 铜牌榜 print(copper_medal)
D = {'a':100, 'b': 2333, 'c': 777, 'd': 666, 'e': 888} res = sorted(D.items(), key=lambda x: x[1]) # 根据字典值进行排序 print(res)
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}] l = sorted(d1, key=lambda x:(-x['score'], x['name'])) # 可以以元组形式传入,当分数相同的时候,按照姓名升序排列 print(l)