我想获得队列中的下一个项目,但我不想将其出列。是否可以在Python的优先级队列中使用?从docs,我看不出怎么办
答案 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函数。