掌握Python中sort函数中key参数的多种用法


sort函数是Python内置的一个排序函数,它可以通过key参数指定排序方式。本文将从多个角度详细介绍sort函数中的key参数。

一、排序方式

sort函数可以对列表、元组等集合内的元素进行排序,排序方式可分为正序(从小到大)和倒序(从大到小)两种。

list1 = [4, 1, 5, 3, 2]
list1.sort()       #默认为正序排序,结果为[1, 2, 3, 4, 5]
list1.sort(reverse=True)  #倒序排序,结果为[5, 4, 3, 2, 1]

在sort函数中,通过reverse参数可控制排序方式。reverse=False(默认)代表正序排序,reverse=True代表倒序排序。

二、根据关键字排序

通过Python中的lambda函数,可以在sort函数中使用一个关键字来进行排序。比如,可以对列表中元素的第二个值进行排序。

student=[('Tom',10), ('John',5), ('Lucy',20), ('Lily',9)]
student.sort(key=lambda x: x[1])
print(student)

在上述代码中,通过lambda函数指定排序关键字为x[1],其中x代表student中的每个元素,[1]代表其中的第二个值。因此,上述运行结果为[('John', 5), ('Lily', 9), ('Tom', 10), ('Lucy', 20)]。

三、根据函数排序

除了可以使用lambda函数外,还可以使用自定义函数作为关键字进行排序。

def sort_by_name(x):
    return x[0]
    
student=[('Tom',10), ('John',5), ('Lucy',20), ('Lily',9)]
student.sort(key=sort_by_name)
print(student)

在上述代码中,自定义函数sort_by_name用来返回student集合中每个元素的名字,作为排序关键字。sort_by_name函数通过返回x[0](x代表student中的每个元素),来获取名字,因此,上述运行结果为[('John', 5), ('Lily', 9), ('Lucy', 20), ('Tom', 10)]。

四、同时指定多个关键字排序

有时候需要同时根据多个关键字来进行排序,这时可以通过lambda函数或自定义函数来实现。下面的示例中,使用了一个名为sort_by_grade的函数,该函数先根据年龄排序,然后再根据成绩排序。

def sort_by_grade(x):
    return (x[1],-x[2])  #成绩倒序
    
student=[('Tom', 19, 80), ('John', 18, 90), ('Lucy', 19, 90), ('Lily', 18, 80)]
student.sort(key=sort_by_grade)
print(student)

在上述代码中,我们使用一个tuple来同时存储年龄和成绩,并使用了一个负号来使成绩倒序排列。运行结果为[('Lily', 18, 80), ('Tom', 19, 80), ('John', 18, 90), ('Lucy', 19, 90)]。

五、编写实用的排序函数

最后,我们可以将上述所有知识点结合在一起,编写一个实用的排序函数。它可以接收一个列表和一个排序关键字,然后返回按照排序关键字排序后的列表。

def my_sort(list1, key_func=lambda x:x, reverse=False):
    return sorted(list1, key=key_func, reverse=reverse)

list1 = [('Tom', 10), ('John', 5), ('Lucy', 20), ('Lily', 9)]
my_sort(list1, key_func=lambda x: x[1])   #以年龄排序
my_sort(list1, key_func=lambda x: x[0])   #以名字排序
my_sort(list1, key_func=lambda x: (x[1], -x[2])) #以年龄、成绩排序

在上述代码中,我们定义了一个名为my_sort的函数,它接收三个参数:待排序的列表、排序关键字、排序方式。其中,排序关键字默认为选取的元素本身,即lambda x:x,排序方式默认为正序。通过组装sort函数,这个自定义函数可以完成与sort函数相同的工作。

六、总结

本文通过多个角度详细讲解了sort函数中key参数的使用,包括正序/倒序排序、根据关键字排序、根据函数排序、同时指定多个关键字排序、编写实用的排序函数等。掌握这些用法后,开发者可以得心应手地进行自定义排序操作。

评论关闭