Skip to main content
 首页 » 编程设计

python之使用带有附加参数的自定义方法进行排序

2025年05月04日23TianFang

所以我有一个适合度函数(对于给定的一对参数只返回 true 或 false),我想将其用作对我的可能参数列表进行排序的键。通常情况下,我可以执行以下操作:

sorted(possibleArguments, key = fitnessFunction) 

这里的问题是我的适应度函数看起来像这样:

def fitnessFunction(arg1, arg2, f): 
    return f(*arg1) < f(*arg2) 

当然,在我想使用排序的方法中,计算适应度所使用的函数是已知的,并且在排序过程中不会改变,但我能以某种方式告诉 Python 是这种情况吗?我可以做类似的事情吗:

sorted(possibleArguments, key = fitnessFunction(one element to be compared, the other one, function I'm currently interested in)) 

如果是,怎么做到的?

请您参考如下方法:

key 不接受比较函数,它将列表的元素转换为可比较的项。

顺便说一句,在 python 3 中不再可能将比较函数传递给 sort(并且 __cmp__ 方法也从对象中消失了),所以你最好习惯它(这很麻烦,如果相等则必须返回 0,如果较小则返回负值,如果较大则返回正值,有点像 strcmp 所做的,过时的。您可以创建复杂的比较函数,但它们可能会显示不稳定。我当然不会想念他们)。

幸运的是,您有 f() 函数就足够了。

你只需要在你的情况下这样做:

sorted(possibleArguments, key = lambda x : f(*x)) 

比较是由 sort 函数完成的。不需要 fitnessFunction