编程语言
首页 > 编程语言> > python3的sorted和sort

python3的sorted和sort

作者:互联网

排序函数

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)

标签:sort,key,print,sorted,排序,medal,python3
来源: https://blog.csdn.net/zy010101/article/details/123229385