sorted()函数:排序与自定义排序
sorted()函数是Python内置的一个通用排序函数,它可以对各种类型的数据进行排序。本文将详细介绍sorted()函数的用法及如何进行自定义排序。
一、sorted()函数的基本用法
1. 对列表进行排序
sorted()函数的最基本用法是对列表进行排序,示例代码如下:
lst = [1, 4, 2, 9, 0, 5] sorted_lst = sorted(lst) print(sorted_lst)
运行结果:
[0, 1, 2, 4, 5, 9]
2. 对元组进行排序
除了列表,元组也可以使用sorted()函数进行排序,示例代码如下:
tp = (1, 4, 2, 9, 0, 5) sorted_tp = sorted(tp) print(sorted_tp)
运行结果:
[0, 1, 2, 4, 5, 9]
3. 对字典进行排序
由于字典是无序的,因此无法直接对字典进行排序。但是,可以使用sorted()函数对字典中的键或值进行排序,示例代码如下:
d = {'a': 1, 'c': 3, 'b': 2}
sorted_keys = sorted(d.keys())
sorted_values = sorted(d.values())
print(sorted_keys)
print(sorted_values)
运行结果:
['a', 'b', 'c'] [1, 2, 3]
二、自定义排序
在实际应用中,我们可能需要对复杂的数据类型进行排序,此时就需要用到自定义排序。自定义排序涉及到一个非常重要的概念——关键字(key)。关键字是用来指定排序规则的,我们可以为每个数据元素设置一个关键字,根据关键字的大小来进行排序。
1. 排序规则
关键字的大小是根据排序规则来决定的。Python内置的sorted()函数默认按照升序排序,即从小到大。如果想按照降序排序,需要设置reverse参数为True。示例代码如下:
lst = [1, 4, 2, 9, 0, 5] sorted_lst = sorted(lst, reverse=True) print(sorted_lst)
运行结果:
[9, 5, 4, 2, 1, 0]
2. 自定义关键字
为了根据自己的需求进行排序,我们需要自定义关键字。自定义关键字可以是一个函数,这个函数接收一个参数,并返回一个值,这个返回值就是排序时根据该元素的大小关系进行判断的值。以一个学生的成绩为例,我们希望按照成绩从高到低排序,示例代码如下:
students = [
{'name': 'Alice', 'score': 85},
{'name': 'Bob', 'score': 90},
{'name': 'Charlie', 'score': 75},
{'name': 'David', 'score': 80},
{'name': 'Eva', 'score': 95},
]
def sort_by_score(student):
return student['score']
sorted_lst = sorted(students, key=sort_by_score, reverse=True)
print(sorted_lst)
运行结果:
[{'name': 'Eva', 'score': 95}, {'name': 'Bob', 'score': 90}, {'name': 'Alice', 'score': 85}, {'name': 'David', 'score': 80}, {'name': 'Charlie', 'score': 75}]
3. 多关键字排序
有时我们需要根据多个关键字进行排序,此时可以使用lambda表达式。以一个学生的信息为例,我们希望按照成绩从高到低排序,如果成绩相同则按照年龄从小到大排序,示例代码如下:
students = [
{'name': 'Alice', 'score': 85, 'age': 18},
{'name': 'Bob', 'score': 90, 'age': 22},
{'name': 'Charlie', 'score': 75, 'age': 20},
{'name': 'David', 'score': 80, 'age': 21},
{'name': 'Eva', 'score': 95, 'age': 19},
]
sorted_lst = sorted(students, key=lambda x:(-x['score'], x['age']))
print(sorted_lst)
运行结果:
[{'name': 'Eva', 'score': 95, 'age': 19}, {'name': 'Bob', 'score': 90, 'age': 22}, {'name': 'David', 'score': 80, 'age': 21}, {'name': 'Alice', 'score': 85, 'age': 18}, {'name': 'Charlie', 'score': 75, 'age': 20}]
4. 稳定排序
Python内置的sorted()函数是稳定排序,即对于值相等的元素,它们在排序后的顺序与在排序前的顺序相同。假设我们有一个列表元素为[1, 1, -2, 3, 0],我们希望按照它们的绝对值从小到大排序,示例代码如下:
lst = [1, 1, -2, 3, 0] sorted_lst = sorted(lst, key=lambda x:abs(x)) print(sorted_lst)
运行结果:
[0, 1, 1, -2, 3]
我们可以看到,在排序前,有两个数值为1的元素,他们在排序后的顺序和在排序前的顺序相同,这就是稳定排序的体现。
三、总结
本文详细介绍了sorted()函数的基本用法和自定义排序的方法。sorted()函数在Python中是非常常用的一个排序函数,它既可以对简单的列表、元组进行排序,也可以对复杂的数据类型进行排序。自定义排序是sorted()函数非常有用的一个功能,它能够帮助我们根据自己的需求进行排序,让我们的代码更加灵活。同时,Python内置的sorted()函数是稳定排序,这一点也需要我们在实际应用中加以利用。
