我可以在不移除的情况下从优先队列中获取一个元素吗?

60 投票
7 回答
93106 浏览
提问于 2025-04-17 13:03

我想获取队列中的下一个项目,但不想把它从队列中移除。在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)函数。

撰写回答