📜  collections.sort 自定义比较器 (1)

📅  最后修改于: 2023-12-03 15:30:03.505000             🧑  作者: Mango

使用collections.sort自定义比较器

有时候,我们需要对一个列表或数组进行排序。在Python中,常常使用 sort 方法来完成这个任务。但是,sort 的默认行为是使用 < 运算符(或者 __lt__() 方法)来比较元素的大小。如果我们需要按照不同的规则进行排序,该怎么办呢?

此时,我们可以使用 collections 模块中的 sort 函数,并且传入一个自定义的比较器函数。比较器函数接收两个参数,然后返回一个负数、零或正数,表示第一个参数应该排在第二个参数的前面、相同位置或后面。

下面是一个示例:

from collections import sort

def my_comparator(a, b):
    if a['score'] < b['score']:
        return -1
    elif a['score'] > b['score']:
        return 1
    else:
        return 0

scores = [
    {'name': 'Alice', 'score': 60},
    {'name': 'Bob', 'score': 80},
    {'name': 'Charlie', 'score': 70}
]

sort(scores, key=my_comparator)

print(scores)

这里我们定义了一个比较器函数 my_comparator,按照字典中 score 属性的大小进行比较。

然后将这个函数传递给 sort 函数的 key 参数,表示使用这个函数进行排序。

执行结果为:

[{'name': 'Alice', 'score': 60},
 {'name': 'Charlie', 'score': 70},
 {'name': 'Bob', 'score': 80}]

这表明我们成功地按照分数从小到大对记录进行了排序。

值得注意的是,我们也可以使用 lambda 表达式来定义比较器:

sort(scores, key=lambda x: x['score'])

这将等价于之前的定义。

总体来说,使用自定义比较器可以让我们在排序时按照不同的规则进行比较,极大地提高了程序的灵活性。