46

我想获得队列中的下一个项目,但我不想将其出列。在 Python 中可能queue.PriorityQueue吗?从文档中,我看不出怎么做

4

6 回答 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 回答