我正在尝试根据我的标准对对象列表进行排序。
这是我的排序函数:
def sort_pots(self, pot1, pot2):
coeff1 = ((pot1.movable + pot1.convertible) / pot1.total)
coeff2 = ((pot2.movable + pot2.convertible) / pot2.total)
if coeff1 > coeff2:
return 1
elif coeff1 == coeff2:
return pot1.total - pot2.total
else:
return -1
我想实现的是: 如果 coeff1 > coeff2,pot1 在 pot2 之前 如果 coeff1 == coeff2,则总计最高的在前 else (coeff2 > coeff1), pot2在pot2之前
并且该功能似乎没有相应地工作。我根据总计订购了一堆,但系数不同。 我有(可兑换、可移动、总计):0、0、1,然后是 0、3、4,然后是 31、228、1584,然后是 1、0、1
这里是pot1和pot2类定义的开始:
class Potential:
def __init__(self,conf_opt):
self.conf_opt = conf_opt
self.total = 0
self.movable = 0
self.convertible = 0
谢谢。
请您参考如下方法:
以下是否有效?
def coef(pot):
return (pot.movable + pot.convertible) / float(pot.total)
l.sort(key=lambda x: (coef(x), x.total), reverse=True)
它甚至应该更快(key 比 cmp 更好)。
