我可以从PriorityQueue获取一个项目而不删除它吗?

时间:2012-02-15 04:34:25

标签: python python-3.x queue

我想获得队列中的下一个项目,但我不想将其出列。是否可以在Python的优先级队列中使用?从docs,我看不出怎么办

5 个答案:

答案 0 :(得分:30)

如果a是PriorityQueue对象,您可以使用a.queue [0]来获取下一个项目:

from Queue import PriorityQueue

a = PriorityQueue()

a.put((10, "a"))
a.put((4, "b"))
a.put((3,"c"))

print a.queue
print a.get()
print a.queue
print a.get()
print a.queue

输出是:

[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]

但请注意多线程访问。

答案 1 :(得分:5)

如果你想要在PriorityQueue中的下一个元素,按照插入元素的顺序,使用:

for i in range(len(queue)):
    print queue.queue[i]

这不会弹出任何东西。

如果您希望按优先顺序排列,请使用:

for i in range(len(queue)):
    temp = queue.get()
    queue.put(temp)
    print temp

如果您使用的是元组而不是单个变量,请将temp替换为:

((temp1,temp2))

答案 2 :(得分:2)

索引队列的第一个元素应该有效。如果您正在使用heapq库,则文档会提及:

  

堆的有趣属性是它的最小元素始终是根heap[0]

答案 3 :(得分:2)

假设您存储在PriorityQueue中的项目是元组(键,值),

def peak(pq):
  return pq.queue[0][1] 

答案 4 :(得分:1)

当你按照理论从队列中获取项目时,它将从队列中删除。你必须编写自己的函数,它将为你提供PriorityQueue的最后一个元素。您可以通过继承优先级来创建一个peek函数。