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