我可以在不移除优先级队列的情况下从优先级队列中获取项目吗?

2024-03-29 06:43:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让下一个项目排队,但我不想让它出列。在Python的优先级队列中是否可能?从docs中,我看不出怎么能做到


Tags: 项目docs队列排队
3条回答

理论上,当您从队列中获取项时,它将从队列中移除。您必须编写自己的函数,该函数将为您提供PriorityQueue的最后一个元素。您可以通过继承priorityqueue来创建一个peek函数。

如果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')]

但是要小心多线程访问。

如果要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))

相关问题 更多 >