我想知道是否有任何方法可以通过__hash__
和__ep__
检查对象是否已经在pririty队列中。我必须在Python 2.7中编写代码。以下是应打印"foo"
的示例代码:
import Queue
class Job(object):
def __init__(self, fpriority, spriority, iata , hops, cost):
self.fpriority = fpriority
self.spriority = spriority
self.iata = iata
self.hops = hops
self.cost = cost
def __eq__(self,other):
return (self.fpriority == other.fpriority and self.spriority == other.spriority and self.iata == other.iata)
def __hash__(self):
return hash((self.fpriority , self.spriority , self.iata))
def __cmp__(self, other):
if self.fpriority > other.fpriority:
return 1
elif self.fpriority < other.fpriority:
return -1
else:
if self.spriority > other.spriority:
return 1
elif self.spriority < other.spriority:
return -1
else:
return 0
q = Queue.PriorityQueue()
q.put(Job(153153, 0, 'b', 1 , 1))
q.put(Job(145, 2, 'a', 1 , 1))
k = Job(145, 2, 'a', 1 , 1)
for l in q:
if k == l:
print "foo"
答案 0 :(得分:3)
这很麻烦,不能保证在python的不同实现/版本中工作。
PriorityQueue
的内容保存在queue
成员中,该成员为普通list
。因此,您可以使用in
测试项目是否存在。由于队列通常用于多线程/处理环境,您可能还想锁定(使用其mutex
成员):
def is_in_queue(x, q):
with q.mutex:
return x in q.queue
这是列表中的线性查找,使用项目上的==
运算符。 <{1}}未使用。