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,

该函数只有一个参数,通常是待比较的元素,

该函数只有一个返回值,及该元素的关键字,根据其确定元素的大小

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

 

 

你可能感兴趣的:(Python3,python3,排序)