我有一个函数,它将2个对象作为参数:a
和b
该函数检查(使用非常长的算法)其中一个对象更好。
如果a更好则返回-1,如果b更好则返回1,如果绑定则返回0
我的问题是:
我在列表中有21个这样的对象。
我需要找出,使用上面的函数(函数不能 改变了,唯一的办法是比较2个对象,这是一个非常复杂的问题 和长算法),这21个对象中哪一个是最好的。
我试过几个小时思考如何有效地做到这一点而不做太多次相同的比较,如何编写一个算法,找出哪一个是最好的(如果其中两个是并列的,它们都是最好的虽然我认为甚至没有可能出现平局,但是哪一个都没关系,并且我无法想出任何好的东西。
该函数的名称为handCompare(a, b)
这些对象位于名为Combos
的列表中,len(combos)
为21
我需要一个算法来找出组合列表中最好的项目
感谢您的阅读,希望您能提供帮助:)
答案 0 :(得分:7)
如果您将hand_compare()
更改为1
,如果a更好,则-1
如果b更好,则会有效。
import functools
best = max(combos, key=functools.cmp_to_key(hand_compare))
答案 1 :(得分:1)
最简单的方法:创建每个对象,比较函数为__cmp__
(python 2.x)或定义__lt__
和__eq__
(python 3.x) 。将每个存储在名为list_的列表中。使用min(list _)找到最不重要的一个。
如果可行的话,可能有帮助的优化:如果你能想出一种将对象映射到(可能很大)整数的方法,那么x的整数是< y的整数,如果原始对象ox是<原始对象oy,然后取一个整数的min。如果它适用于您的类型,这应该会略微加快速度。