📅  最后修改于: 2023-12-03 15:30:03.505000             🧑  作者: Mango
有时候,我们需要对一个列表或数组进行排序。在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'])
这将等价于之前的定义。
总体来说,使用自定义比较器可以让我们在排序时按照不同的规则进行比较,极大地提高了程序的灵活性。