2016-12-14 35 views
1

所以我有一个健身函数(对于给定的一对参数只返回true或false),我想用它作为排序可能参数列表的关键字。虽然通常情况下,我可以这样做:使用具有附加参数的自定义方法排序?

sorted(possibleArguments, key = fitnessFunction) 

这里probles是我的适应度函数如下:

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

当然,在方法我想用排序,用于计算适应度的函数是已知的,并且在排序期间不会改变,但是我能否以某种方式告诉Python,情况如何?我可以做些什么:

如果是这样,怎么样?

+0

相同类型的'arg1'和'arg2'对象?如果是这样,您可以在该类中编写'__gt__','__lt__'和'__eq__'函数来进行比较。 – Brobin

+0

@Brobin是的,他们是相同数量的花车每个 – Straightfw

+0

嗯,如果你在一个类中把它包起来,你可以使用这些方法的简单元组。 – Brobin

回答

5

key不采用比较功能,它将列表中的元素转换为可比项目。

BTW它不再可能在Python 3的比较函数传递给sort(和__cmp__方法是从对象也消失了),所以你最好习惯它(这是很麻烦,你不得不如果等于返回0 ,如果负较少,正面的,如果比较大,有点像strcmp呢,过时了。你可以创建复杂的比较功能,但它们可以揭示不稳定的。我当然不会错过它们)。

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

你一定要做到这一点,你的情况:

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

攀比由sort函数来完成。不需要fitnessFunction

+0

哦,你说的没错!非常感谢 :) – Straightfw

相关问题