用具有附加参数的自定义方法进行排序



因此,我有一个健身函数(仅返回给定参数的真或错),我想用作对可能的参数列表进行排序的键。虽然通常,我可以做类似:

的事情
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,如果等于0,如果等于0消极的话,较小,如果更大的话,有点像strcmp一样,古老。您可以创建复杂的比较功能,但它们可以揭示不稳定的功能。我肯定不会错过它们)。

幸运的是,您的f()功能就足够了。

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

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

比较由sort函数完成。无需fitnessFunction

最新更新