Python语言内置了排序函数,即list对象有一个sort()方法以及sorted()函数
该方法会修改列表对象,且该方法的返回值为None,因此不可以将list.sort()赋值给列表
该函数可以接受一个列表,并且返回一个新的排好序的列表,不会改变原参数列表
两种方法默认的都是升序排列,可以通过reverse参数指定升/降序排列,该参数的取值为True或者False,默认值为False
# 多关键字排序
L = [5, 2, 3, 1, 4]
print(sorted(L, reverse=True))
names = ['Do', 'you', 'come', 'from', 'China']
# 字符串按照ASCII码来比较大小
names.sort(reverse=True)
print(names)
结果如下所示:
[5, 4, 3, 2, 1]
['you', 'from', 'come', 'Do', 'China']
key参数的值是一个函数对象,默认值是None,
该函数只有一个参数,通常是待比较的元素,
该函数只有一个返回值,及该元素的关键字,根据其确定元素的大小
students = [
('john', 'A', 18),
('jane', 'B', 19),
('dave', 'B', 17)
]
print(sorted(students, key=lambda s: s[0]))
[('dave', 'B', 17), ('jane', 'B', 19), ('john', 'A', 18)]
多关键字排序:先对主关键字进行排序,再对次关键字进行排序
利用sorted()函数多次排序
L = [
('摩洛哥', 2, 2, 0, 1),
('葡萄牙', 5, 4, 1, 5),
('西班牙', 6, 5, 1, 5),
('伊朗', 2, 2, 0, 4)
]
L = sorted(L, key=lambda t: t[1],reverse=True) # 积分数
print(L)
L = sorted(L, key=lambda t: t[3], reverse=True) # 净胜球数
print(L)
L = sorted(L, key=lambda t: t[4], reverse=True) # 进球数
print(L)
[('西班牙', 6, 5, 1, 5), ('葡萄牙', 5, 4, 1, 5), ('摩洛哥', 2, 2, 0, 1), ('伊朗', 2, 2, 0, 4)]
[('西班牙', 6, 5, 1, 5), ('葡萄牙', 5, 4, 1, 5), ('摩洛哥', 2, 2, 0, 1), ('伊朗', 2, 2, 0, 4)]
[('西班牙', 6, 5, 1, 5), ('葡萄牙', 5, 4, 1, 5), ('伊朗', 2, 2, 0, 4), ('摩洛哥', 2, 2, 0, 1)]