ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python3的sorted和sort

2022-03-02 14:32:16  阅读:223  来源: 互联网

标签:sort key print sorted 排序 medal python3


排序函数

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有