Могу ли я получить предмет из PriorityQueue, не удаляя его? - PullRequest
23 голосов
/ 15 февраля 2012

Я хочу получить следующий элемент в очереди, но не хочу удалять его из очереди.Возможно ли это в очереди приоритетов Python?Из документов я не вижу, как это можно сделать

Ответы [ 5 ]

30 голосов
/ 15 февраля 2012

Если 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')]

но будьте осторожны с многопоточным доступом.

5 голосов
/ 11 июня 2015

Если вы хотите следующий элемент в 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))
2 голосов
/ 14 мая 2017

Предполагая, что ваши элементы, хранящиеся в PriorityQueue, являются кортежами (ключ, значение),

def peak(pq):
  return pq.queue[0][1] 
2 голосов
/ 15 февраля 2012

Индексирование первого элемента очереди должно работать. Если вы используете библиотеку heapq, в документе упоминается:

Интересным свойством кучи является то, что ее наименьший элемент всегда является корнем, heap[0].

1 голос
/ 15 февраля 2012

Когда вы получите элемент из очереди, согласно теории он будет удален из очереди.Вы должны написать свою собственную функцию, которая даст вам последний элемент PriorityQueue.Вы можете создать функцию просмотра, наследуя приоритетную очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...