Я хочу получить следующий элемент в очереди, но не хочу его исключать. Возможно ли это в очереди приоритетов Python? Из документации я не понимаю, как это можно сделать
Когда вы получите элемент из очереди, согласно теории он будет удален из очереди. Вы должны написать свою собственную функцию, которая даст вам последний элемент PriorityQueue. Вы можете создать функцию просмотра путем наследования очереди приоритетов.
Если 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))
Предполагая, что ваши элементы, хранящиеся в PriorityQueue, являются кортежем (ключ, значение),
def peak(pq):
return pq.queue[0][1]
Индексирование первого элемента очереди должно работать. Если вы используете библиотеку heapq
, в документе упоминается:
Интересным свойством кучи является то, что ее наименьший элемент всегда является корнем,
heap[0]
.