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

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

25
задан Jiew Meng 15 February 2012 в 04:34
поделиться

5 ответов

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

1
ответ дан 28 November 2019 в 21:13
поделиться

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

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

30
ответ дан 28 November 2019 в 21:13
поделиться

Если вы хотите следующий элемент в 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))
6
ответ дан 28 November 2019 в 21:13
поделиться

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

def peak(pq):
  return pq.queue[0][1] 
2
ответ дан 28 November 2019 в 21:13
поделиться

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

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

2
ответ дан 28 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: