我可以在不移除的情况下从优先队列中获取一个元素吗?
我想获取队列中的下一个项目,但不想把它从队列中移除。在Python的queue.PriorityQueue
中,这可能吗?从文档来看,我没有找到可以做到这一点的方法。
7 个回答
8
如果你想要在优先队列中获取下一个元素,按照你插入元素的顺序,可以使用:
for i in range(len(queue.queue)):
print queue.queue[i]
这样做不会把任何东西弹出。
如果你想按照优先级的顺序获取元素,可以使用:
for i in range(len(queue.queue)):
temp = queue.get()
queue.put(temp)
print temp
如果你使用的是元组,而不是单个变量,可以把temp替换为:
((temp1,temp2))
75
如果a是一个优先队列对象,你可以用 a.queue[0]
来获取下一个项目:
from queue import PriorityQueue
a = PriorityQueue()
a.put((10, "a"))
a.put((4, "b"))
a.put((3,"c"))
print(a.queue[0])
print(a.queue)
print(a.get())
print(a.queue)
print(a.get())
print(a.queue)
输出结果是:
(3, 'c')
[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]
不过要注意多线程访问的问题。
2
根据理论,当你从队列中获取一个项目时,它会从队列中被移除。你需要自己写一个函数,来获取优先队列中的最后一个元素。你可以通过继承优先队列来创建一个查看(peek)函数。