所以我有一个适应度函数(对于给定的一对参数只返回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))
若然,怎么样?
答案 0 :(得分:5)
key
不接受比较功能,它会将列表中的元素转换为可比较的项目。
BTW它不再可能将比较函数传递给python 3中的sort
(并且__cmp__
方法也从对象中消失了),所以你最好习惯它(它很麻烦,你必须返回0如果相等,负数如果更小,正面更大,有点像strcmp
那样,古老。你可以创建复杂的比较函数,但它们可以显示不稳定。我肯定不会#39 ; t想念他们。)
幸运的是,你有f()
功能就足够了。
你必须在你的情况下这样做:
sorted(possibleArguments, key = lambda x : f(*x))
比较由sort
函数完成。无需fitnessFunction