我创建了一个名为Element的新类对象,它具有很多价值' 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)
我想创建一个包含这些元素的优先级队列:
que = Queue.PriorityQueue()
que.put(Element('element1', 23))
que.put(Element('element2', 45))
que.put(Element('element3', 11))
while not que.empty():
next_el = que.get()
print next_el.name + " " + next_el.degree
程序将打印出来:
element3 11
element1 23
element2 45
但我希望:
element2 45
element1 23
element3 11
所以我想说,具有更大程度值的元素具有更高的优先级并且首先被采用。 第二个问题是:如果两个元素具有相同的度数值,它们将采用哪种顺序?
答案 0 :(得分:1)
您可以使用此方法进行比较:
def __cmp__(self, other):
return -cmp(self.degree, other.degree)
如果element1 < element2
element1.degree > element2.degree
答案 1 :(得分:1)
您可以修改Element
类的比较方法以反转顺序:
def __cmp__(self, other):
return -cmp(self.degree, other.degree)
取消cmp
的返回会使队列反转,因为__cmp__
会返回正数,负数或零,具体取决于比较结果:
cmp(a, b) < 0: a < b
cmp(a, b) > 0: a > b
cmp(a, b) == 0: a == b