📅  最后修改于: 2023-12-03 15:34:11.779000             🧑  作者: Mango
在 Python 中,我们可以使用内置的排序函数 sorted()
来对数组进行排序。然而,有时候我们需要使用自定义的比较器来实现特定的排序逻辑。本文将介绍如何在 Python 中使用自定义比较器来排序数组。
Python 中内置的排序函数 sorted()
的语法如下:
sorted(iterable, key=None, reverse=False)
其中:
iterable
:要排序的可迭代对象,如列表、元组等。key
:用于指定排序的比较器,可以是一个函数或 lambda 表达式。如果不指定,则按元素直接比较。reverse
:是否倒序排序,默认为 False
,表示升序排序。自定义比较器是一个函数,它接受一个元素作为参数并返回一个可排序的值,用于对元素进行比较。比如我们可以自定义一个按元素长度从小到大排序的比较器:
def cmp_len(s):
return len(s)
然后,我们可以将其作为 key
参数传入 sorted()
函数,对数组进行排序:
arr = ['a', 'ccc', 'bb']
sorted_arr = sorted(arr, key=cmp_len) # ['a', 'bb', 'ccc']
注意,自定义比较器函数应该只接受一个参数,并返回一个能够比较的值,比如数字或字符串。如果要进行复合排序,可以使用元组来表示多个排序因素。
下面是一个完整的示例程序,它使用自定义比较器来对学生列表按成绩从高到低排序(如果成绩相同,则按名字字典序排序):
from typing import List
class Student:
def __init__(self, name: str, score: int):
self.name = name
self.score = score
def cmp_student(s: Student):
return (-s.score, s.name)
def sort_students(students: List[Student]) -> List[Student]:
return sorted(students, key=cmp_student)
students = [
Student('Alice', 80),
Student('Bob', 90),
Student('Charlie', 70),
Student('David', 90),
]
sorted_students = sort_students(students)
for s in sorted_students:
print(s.name, s.score)
输出如下:
Bob 90
David 90
Alice 80
Charlie 70
在上面的示例中,我们定义了一个 Student
类,它包含了学生的名字和成绩。然后我们定义了一个按成绩从高到低、名字从小到大排序的比较器 cmp_student
,并将其作为 key
参数传入 sorted()
函数,对学生列表进行排序。
本文介绍了如何在 Python 中使用自定义比较器来对数组进行排序,以及如何使用元组进行复合排序。自定义比较器是实现特定排序逻辑的重要工具,可以大大提高程序的灵活性和可读性。