Skip to main content
 首页 » 编程设计

python之python中的排序函数

2025年05月04日12lexus

我正在尝试根据我的标准对对象列表进行排序。

这是我的排序函数:

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 更好)。