欢迎访问宙启技术站
智能推送

如何使用 Python 的 sorted 函数对列表进行排序

发布时间:2023-06-04 10:45:20

Python 中的 sorted 函数可以对列表进行排序,实现非常简单。

sorted 函数的语法如下:

sorted(iterable, key=None, reverse=False)

其中 iterable 表示要排序的可迭代对象,可以是列表、元组等等;key 表示排序的规则,可以传入函数或 lambda 表达式来指定;reverse 表示是否要反转排序结果,默认为 False,即升序排序。

下面以一个列表为例来演示 sorted 函数的用法。

1. 单纯排序

我们创建一个名为 scores 的列表,其中包含若干个学生的成绩:

scores = [95, 78, 85, 68, 72, 90, 88]

现在我们要将这个列表按照升序排列。使用 sorted 函数实现如下:

scores_sorted = sorted(scores)
print(scores_sorted)

输出结果如下:

[68, 72, 78, 85, 88, 90, 95]

注意,原列表 scores 并没有被改变。

2. 按照指定规则排序

如果我们要按照其他规则排序,可以传入一个 key 函数或 lambda 表达式,来指定排序的依据。

比如,我们可以按照学生的名字长度来排序,代码如下:

students = ['Alice', 'Bob', 'Cindy', 'Dave', 'Emma']
students_sorted = sorted(students, key=lambda x: len(x))
print(students_sorted)

输出结果如下:

['Bob', 'Dave', 'Emma', 'Alice', 'Cindy']

这里的 lambda 函数会将每个元素 x 替换成它的长度 len(x),然后按照长度进行排序。

再比如,我们可以按照学生的成绩和名字字典序进行多重排序,代码如下:

students = [('Alice', 95), ('Bob', 78), ('Cindy', 85), ('Dave', 68), ('Emma', 90)]
students_sorted = sorted(students, key=lambda x: (-x[1], x[0]))
print(students_sorted)

输出结果如下:

[('Alice', 95), ('Emma', 90), ('Cindy', 85), ('Bob', 78), ('Dave', 68)]

这里的 lambda 函数会将每个元素 x 替换成一个元组 (-x[1], x[0]),其中 个元素是成绩的负数,第二个元素是名字本身,表示先按照成绩降序排序,然后按照名字的字典序升序排序。

3. 反转排序结果

如果我们想要得到降序排列的结果,可以将 reverse 参数设置为 True,例如:

scores_sorted = sorted(scores, reverse=True)
print(scores_sorted)

输出结果如下:

[95, 90, 88, 85, 78, 72, 68]

以上就是 sorted 函数的基本用法。需要注意的是,sorted 函数返回的是一个新的列表,原有的列表并不会被改变。如果我们想要对原列表进行排序,可以使用列表的 sort 方法。