Python 是否使用带有附加参数的自定义方法进行排序?

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

所以我有一个适应度函数(对于给定的一对参数只返回true或false),我想用它作为对可能的参数列表进行排序的键。正常情况下,我可以做以下事情:

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是的如果你把它包装在一个类中,你可以使用这些方法。