Подтвердить что ты не робот

Можно ли получить элемент из PriorityQueue без его удаления?

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

4b9b3361

Ответ 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]