Python 排序总结
Python 排序总结1、列表排序1.1 升序1.2 降序2、字典排序2.1 升序2.1.1 lambda 表达式2.1.2 operator 模块2.2 降序2.2.1 lambda 表达式2.2.2 operator 模块3、包含字典的列表排序3.1 升序3.1.1 lambda 表达式3.1.2 operator 模块3.2 降序3.2.1 lambda 表达式3.2.2 operator 模块4、包含元组的列表排序
列表、字典、包含字典的列表、包含元组的列表排序
两种方法
sorted (list): 返回一个对象,原来的 list 不变,生成一个新的排好的 list 对象;
list.sort (): 不会返回对象,改变原有 list。
排序实例:
L = [2, 4, 1, 5, 9]
1.1 升序
>>> sorted(L)
[1, 2, 4, 5, 9]
>>> L.sort()
>>> print L
[1, 2, 4, 5, 9]
1.2 降序
reverse 关键字:排序规则。 reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)
>>> sorted(L,reverse=True)
[9, 5, 4, 2, 1]
>>> L.sort(reverse=True)
>>> print L
[9, 5, 4, 2, 1]
2、字典排序
字典的特点是无序,可以按照键(key)或者值(value)对其进行排序,但是返回的结果肯定不能是字典。
排序实例:
D = {'jack': 23, 'rose': 21, 'flank': 22}
2.1 升序
2.1.1 lambda 表达式
>>> sorted(D.items(), key=lambda d:d[1]) # 值(value)排序
[('rose', 21), ('flank', 22), ('jack', 23)]
>>> sorted(D.items(), key=lambda d:d[0]) # 按键(key)排序按
[('flank', 22), ('jack', 23), ('rose', 21)]
sorted(iterable[, cmp[, key[, reverse]]])
iterable:是可迭代类型类型;
cmp:用于比较的函数,比较什么由 key 决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
2.1.2 operator 模块
>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(1)) # 值(value)排序
[('rose', 21), ('jack', 23), ('flank', '23')]
>>> print sorted(D.items(), key=operator.itemgetter(0)) # 按键(key)排序按
[('flank', '23'), ('jack', 23), ('rose', 21)]
2.2 降序
2.2.1 lambda 表达式
和 list 一样,加入 reverse 参数即可
>>> sorted(D.items(), key=lambda d:d[0], reverse=True) # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', 22)]
>>> sorted(D.items(), key=lambda d:d[1], reverse=True) # 值(value)排序
[('jack', 23), ('flank', 22), ('rose', 21)]
2.2.2 operator 模块
>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(0), reverse=True) # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', '23')]
>>> print sorted(D.items(), key=operator.itemgetter(1), reverse=True) # 值(value)排序
[('flank', '23'), ('jack', 23), ('rose', 21)]
3、包含字典的列表排序
指定 list 中字典的某个键值进行排序
排序实例:
D = [{'name': 'jack', 'age': 23}, {'name': 'rose', 'age': 21}, {'name': 'flank','age': 22}]
3.1 升序
3.1.1 lambda 表达式
>>> import operator
>>> sorted(D, key=lambda x : x['age'])
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]
3.1.2 operator 模块
>>> import operator
>>> sorted(D, key=operator.itemgetter('name')) # 根据'name'排序
[{'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}, {'age': 21, 'name': 'rose'}]
>>> sorted(D, key=operator.itemgetter('age')) # 根据'age'排序
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]
3.2 降序
一样,加入 reverse 参数即可
3.2.1 lambda 表达式
>>> import operator
>>> sorted(D, key=lambda x : x['age'], reverse=True)
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]
3.2.2 operator 模块
>>> import operator
>>> sorted(D, key=operator.itemgetter('name'), reverse=True) # 根据'name'排序
[{'age': 21, 'name': 'rose'}, {'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}]
>>> sorted(D, key=operator.itemgetter('age'), reverse=True) # 根据'age'排序
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]
4、包含元组的列表排序
对列表中的元组排
# 升序, 降序加reverse=True
L.sort(key=lambda x:x[0]) # 根据第1个值排序
L.sort(key=operator.itemgetter(0)) # 根据第1个值排序
[('a', 4), ('b', 1), ('c', 2)]
L.sort(key=lambda x:x[1]) # 根据第2个值排序
L.sort(key=operator.itemgetter(1)) # 根据第2个值排序
[('b', 1), ('c', 2), ('a', 4)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通