我想获得队列中的下一个项目,但我不想将其出列。在 Python 中可能queue.PriorityQueue
吗?从文档中,我看不出怎么做
问问题
70070 次
6 回答
59
如果 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[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')]
但要小心多线程访问。
于 2012-02-15T05:08:08.897 回答
6
如果您想要 PriorityQueue 中的下一个元素,按照元素的插入顺序,使用:
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))
于 2015-06-11T05:40:46.037 回答
4
假设您存储在 PriorityQueue 中的项目是一个元组(优先级,值),
def peek(pq):
return pq.queue[0][1]
于 2017-05-14T04:43:17.360 回答
3
索引队列的第一个元素应该可以工作。如果您正在使用该heapq
库,该文档会提到:
堆的有趣特性是它的最小元素始终是根,
heap[0]
.
于 2012-02-15T04:53:43.190 回答
2
根据理论,当您从队列中获取项目时,它将从队列中删除。您必须编写自己的函数,该函数将为您提供 PriorityQueue 的最后一个元素。你可以通过继承priorityqueue来创建peek函数。
于 2012-02-15T04:56:58.827 回答
0
如果q
是 PeriorityQueue,那么您可以使用:
for i in range(q.qsize()):
print(q.queue[i])
于 2021-09-18T11:04:25.833 回答