Python3|Python语言实现多关键字排序问题

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)]



    推荐阅读