Python中如何使用sorted函数对列表进行排序?
列表是Python中一种常见的序列数据类型,列表中的元素可以是任何对象,包括数字、字符串、元组、列表等。在实际的应用场景中,我们常常需要对一个列表中的元素进行排序,以便更方便地对其进行查找、统计、输出等操作。Python中提供了多种排序方法,而本篇文章将介绍其中的sorted函数。
1. sorted函数的基本使用方法
sorted函数是Python内置的排序函数,可以对一个列表进行排序,并返回一个新的排序后的列表。其基本语法如下:
sorted(iterable, *, key=None, reverse=False)
其中,iterable是需要排序的可迭代对象,例如列表、元组、字符串等;key是一个函数,用于从每个元素中提取一个用于排序的关键字,用法类似与sort函数中的key参数;reverse是一个布尔值,表示是否按照反向顺序排序,默认值为False,表示升序排列。
例如,对一个包含随机整数的列表进行排序,可以使用以下代码:
import random
lst = [random.randint(0, 100) for _ in range(10)]
print("Original list: ", lst)
sorted_lst = sorted(lst)
print("Sorted list: ", sorted_lst)
运行结果如下:
Original list: [93, 76, 75, 95, 63, 57, 0, 69, 43, 27]
Sorted list: [0, 27, 43, 57, 63, 69, 75, 76, 93, 95]
2. sorted函数的高级应用
除了基本用法之外,sorted函数还提供了许多高级用法,例如以下几个方面:
2.1 按照列表中元素的某个属性进行排序
假设有一个包含多个学生信息的列表,其中每个元素都是一个字典,包含学生的姓名、年龄和成绩等属性,现在需要按照成绩降序排列。可以使用以下代码:
students = [
{"name": "Tom", "age": 18, "score": 90},
{"name": "Jerry", "age": 17, "score": 80},
{"name": "Alice", "age": 19, "score": 95},
{"name": "Bob", "age": 20, "score": 85}
]
sorted_students = sorted(students, key=lambda x: x['score'], reverse=True)
for student in sorted_students:
print(student)
其中,key参数指定了一个lambda函数,用于从每个学生中提取其成绩属性,并作为排序的关键字。
结果如下:
{'name': 'Alice', 'age': 19, 'score': 95}
{'name': 'Tom', 'age': 18, 'score': 90}
{'name': 'Bob', 'age': 20, 'score': 85}
{'name': 'Jerry', 'age': 17, 'score': 80}
2.2 多级排序
如果存在多个排序关键字,可以使用多级排序来实现。例如,在上述的学生列表中,需要先按照成绩降序排列,再按照年龄升序排列。可以使用以下代码:
sorted_students = sorted(students, key=lambda x: (-x['score'], x['age']))
for student in sorted_students:
print(student)
其中,lambda函数返回一个元组,元组中的 个元素是一个负数,表示成绩的负值,以实现降序排序;元组中的第二个元素是年龄,以实现升序排序。
运行结果如下:
{'name': 'Alice', 'age': 19, 'score': 95}
{'name': 'Tom', 'age': 18, 'score': 90}
{'name': 'Bob', 'age': 20, 'score': 85}
{'name': 'Jerry', 'age': 17, 'score': 80}
2.3 按照自定义的规则进行排序
如果希望按照一些特定的规则进行排序,例如将首字母相同的字符串放在一起,可以自定义一个函数来作为排序的key参数。例如:
words = ["banana", "apple", "pineapple", "pear", "peach", "palm"]
def sort_by_first_letter(word):
return ord(word[0])
sorted_words = sorted(words, key=sort_by_first_letter)
print(sorted_words)
其中,sort_by_first_letter函数返回字符串的首字母的ASCII码值,用于作为排序关键字。
运行结果如下:
['apple', 'banana', 'pear', 'peach', 'pineapple', 'palm']
2.4 复杂对象的排序
如果需要对一组复杂的对象进行排序,需要定义一个用于比较的规则。例如,在以下的代码中,需要对一组测量得到的三维坐标进行排序,可以按照以下规则进行排序:先按照x坐标排序,若x坐标相等,则按照y坐标排序,若y坐标相等,则按照z坐标排序。
class Point:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
def __repr__(self):
return f"({self.x}, {self.y}, {self.z})"
points = [
Point(1, 2, 3),
Point(0, 2, 3),
Point(1, 1, 1),
Point(0, 1, 2),
Point(1, 2, 1)
]
def sort_points(p):
return (p.x, p.y, p.z)
sorted_points = sorted(points, key=sort_points)
print(sorted_points)
其中,sort_points函数返回一个元组,用于作为排序关键字。
运行结果如下:
[(0, 1, 2), (0, 2, 3), (1, 1, 1), (1, 2, 1), (1, 2, 3)]
3. 总结
sorted函数是Python内置的排序函数,可以按照不同的规则对一个可迭代对象进行排序,并返回一个新的排序后的列表。除了基本的排序功能之外,sorted函数还提供了许多高级功能,例如多级排序、自定义规则、复杂对象的排序等。使用sorted函数可以方便地对一个列表进行排序,并提高代码的可读性和可维护性。
