sorted函数是Python内置的排序函数。它接受一个可迭代的对象作为输入,返回一个新的经过排序的列表。
语法格式如下: sorted(iterable, key=None, reverse=False)
参数说明:
- iterable:可迭代对象,例如列表、元组、字符串等。
- key:可选参数,用于指定排序的方式,可以是一个函数或者lambda表达式。默认值为None,表示按照元素的大小进行排序。
- reverse:可选参数,用于指定是否降序排列。默认值为False,表示升序排列。
注意:sorted函数返回一个新的已排序的列表,原始列表不会被修改。如果要对原始列表进行排序,可以使用列表的sort方法。
1.简单数字
如果列表元素是一个个数字,直接调用函数即可。
list1 = [2, 6, 3, 8]
# 升序排列
print(sorted(list1)) # 输出:[2, 3, 6, 8]
# 倒序排列
print(sorted(list1, reverse=True)) # 输出:[8, 6, 3, 2]
2.嵌套列表或元组
若列表中嵌套了列表或元组作为元素,可指定元素列表某个位置的值作为排序依据。
list2 = [
[88, 90, 94],
[94, 80, 88],
[80, 92, 86],
]
# 1.根据元素列表的第一个值作为排序依据
print(sorted(list2, key=lambda x: x[0]))
# 输出:[[80, 92, 86], [88, 90, 94], [94, 80, 88]]
# 2.根据元素列表的第二个值作为排序依据
print(sorted(list2, key=lambda x: x[1]))
# 输出:[[94, 80, 88], [88, 90, 94], [80, 92, 86]]
# 3.根据元素列表的第三个值作为排序依据
print(sorted(list2, key=lambda x: x[2]))
# 输出:[[80, 92, 86], [94, 80, 88], [88, 90, 94]]
3.嵌套字典
若列表中嵌套了字典,可指定元素字典某个键的值作为排序依据。
list2 = [
{'name': '张三', 'yuwen': 88, 'shuxue': 90, 'yingyu': 94},
{'name': '李四', 'yuwen': 94, 'shuxue': 80, 'yingyu': 88},
{'name': '王五', 'yuwen': 80, 'shuxue': 92, 'yingyu': 86},
]
# 1.根据字典中yuwen键的值进行排序
print(sorted(list2, key=lambda x: x['yuwen']))
# [{'name': '王五', 'yuwen': 80, 'shuxue': 92, 'yingyu': 86},
# {'name': '张三', 'yuwen': 88, 'shuxue': 90, 'yingyu': 94},
# {'name': '李四', 'yuwen': 94, 'shuxue': 80, 'yingyu': 88}]
# 其他同理
4.多重排序且顺序相同
要实现多重排序,只需要在key参数的匿名函数中返回多个值即可。
list3 = [
[88, 90, 94],
[94, 80, 88],
[80, 90, 86],
]
# 先根据第二个值从小到大排序,第二个值相同的,按第一个值从小到大排序
# 优先级是从左到右
print(sorted(list3, key=lambda x: (x[1], x[0])))
# 输出:[[94, 80, 88], [80, 90, 86], [88, 90, 94]]
5.多重排序且顺序相反
有多重排序,但顺序是一个升序,一个降序的。解决方法也简单,在反向的值前面加上负号。
list3 = [
[88, 90, 94],
[94, 80, 88],
[80, 90, 86],
]
# 先根据第二个值从小到大排序,第二个值相同的,按第一个值从大到小排序
print(sorted(list3, key=lambda x: (x[1], -x[0])))
# 输出:[[94, 80, 88], [88, 90, 94], [80, 90, 86]]