Python语言内置了排序函数,即list对象有一个sort()方法以及sorted()函数
sort()方法
该方法会修改列表对象,且该方法的返回值为None,因此不可以将list.sort()赋值给列表
sorted()函数
该函数可以接受一个列表,并且返回一个新的排好序的列表,不会改变原参数列表
改变升/降序方式
两种方法默认的都是升序排列,可以通过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参数来决定如何比较元素
key参数的值是一个函数对象,默认值是None,
该函数只有一个参数,通常是待比较的元素,
【Python3|Python语言实现多关键字排序问题】该函数只有一个返回值,及该元素的关键字,根据其确定元素的大小
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)]
推荐阅读
- Codeforces|Codeforces Round #643 (Div. 2) B.Young Explorers
- 学习|python3打印菱形(测试过)
- python生成13位或16位时间戳以及反向解析时间戳
- 笔记|几种面试常见排序的实现
- 暴力|最大最小公倍数
- Python3实战Spark大数据分析及调度