Python 是否使用带有附加参数的自定义方法进行排序?
所以我有一个适应度函数(对于给定的一对参数只返回true或false),我想用它作为对可能的参数列表进行排序的键。正常情况下,我可以做以下事情:Python 是否使用带有附加参数的自定义方法进行排序?,python,sorting,Python,Sorting,所以我有一个适应度函数(对于给定的一对参数只返回true或false),我想用它作为对可能的参数列表进行排序的键。正常情况下,我可以做以下事情: sorted(possibleArguments, key = fitnessFunction) sorted(possibleArguments, key = fitnessFunction(one element to be compared, the other one, function I'm currently interested in
sorted(possibleArguments, key = fitnessFunction)
sorted(possibleArguments, key = fitnessFunction(one element to be compared, the other one, function I'm currently interested in))
这里的问题是,我的适应度函数如下所示:
def fitnessFunction(arg1, arg2, f):
return f(*arg1) < f(*arg2)
如果是,怎么做?
键
不使用比较函数,它将列表中的一个元素转换为可比较的项
顺便说一句,在Python3中不再可能将比较函数传递给sort
(而且\uuuu-cmp\uuuu
方法也从对象中消失了),因此您最好习惯它(这很麻烦,如果相等,就必须返回0,如果较小,就必须返回负数,如果较大,就必须返回正数,这有点像strcmp,太古老了。你可以创建复杂的比较函数,但它们可能会显示不稳定。我当然不会错过它们)
幸运的是,您有足够的f()
函数
在您的情况下,您只需这样做:
sorted(possibleArguments, key = lambda x : f(*x))
比较是通过
排序
函数完成的。不需要fitnessFunction
键
不采用比较函数,它将列表中的一个元素转换为可比项
顺便说一句,在Python3中不再可能将比较函数传递给sort
(而且\uuuu-cmp\uuuu
方法也从对象中消失了),因此您最好习惯它(这很麻烦,如果相等,就必须返回0,如果较小,就必须返回负数,如果较大,就必须返回正数,这有点像strcmp,太古老了。你可以创建复杂的比较函数,但它们可能会显示不稳定。我当然不会错过它们)
幸运的是,您有足够的f()
函数
在您的情况下,您只需这样做:
sorted(possibleArguments, key = lambda x : f(*x))
比较是通过
sort
函数完成的。不需要fitnessFunction
是arg1
和arg2
对象的类型相同吗?如果是这样,您可以编写\uuuu gt\uuuu
、\uu lt\uuuuu
和\uuuu eq\uu>函数来进行比较。@Brobin-yep,它们是简单的元组。@Brobin-yep如果你把它包装在一个类中,你可以使用那些方法。对象的类型是相同的吗?如果是,你可以在那个类中编写\uuu gt\uuu
,\uu lt\uuuu
和\uu eq\uu
函数来进行比较。@Brobin是的,它们是相同数量的简单元组。@Brobin是的如果你把它包装在一个类中,你可以使用这些方法。