使用反向ord创建优先级队列

2024-04-26 09:39:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个名为Element的新的类o对象,它有很多值“degree”

class Element(object):
 def __init__(self, name, i):
  self.name = name
  self.degree = i
  # some other values

 #some other functions

 def __cmp__(self, other):
  return cmp(self.degree, other.degree)

我想创建一个包含以下元素的优先级队列:

^{pr2}$

程序将打印:

element3 11
element1 23
element2 45

但我想要:

element2 45
element1 23
element3 11

所以我想说,度值越大的元素优先级越高,优先考虑。 第二个问题是:如果两个元素的度值相同,它们将按什么顺序被取?在


Tags: 对象nameself元素defsomeelementclass
2条回答

您可以使用此方法进行比较:

def __cmp__(self, other):
    return -cmp(self.degree, other.degree)

这将使element1 < element2如果element1.degree > element2.degree

您可以修改Element类的比较方法以颠倒顺序:

def __cmp__(self, other):
  return -cmp(self.degree, other.degree)

否定cmp的返回将反转队列,因为__cmp__根据比较结果返回正、负或零:

^{pr2}$

相关问题 更多 >