web-dev-qa-db-fra.com

Puis-je obtenir un article d'une PriorityQueue sans le supprimer encore?

Je veux mettre l'élément suivant dans la file d'attente, mais je ne veux pas le retirer de la file d'attente. Est-ce possible dans la file d'attente prioritaire de Python? De la docs , je ne vois pas comment cela peut être fait

24
Jiew Meng

Lorsque vous obtenez un élément de la file d'attente selon la théorie, il sera supprimé de la file d'attente. Vous devez écrire votre propre fonction qui vous donnera le dernier élément de PriorityQueue. Vous pouvez créer une fonction d'aperçu en héritant de la file d'attente prioritaire.

1
Nilesh

Si a est un objet PriorityQueue, vous pouvez utiliser a.queue [0] pour obtenir l'élément suivant:

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

la sortie est:

[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]

mais faites attention à l'accès multi-thread.

30
HYRY

Si vous voulez l'élément suivant dans la PriorityQueue, dans l'ordre d'insertion des éléments, utilisez:

for i in range(len(queue)):
    print queue.queue[i]

cela ne sortira rien.

Si vous le souhaitez dans l'ordre de priorité, utilisez:

for i in range(len(queue)):
    temp = queue.get()
    queue.put(temp)
    print temp

Si vous utilisez un tuple, au lieu d'une seule variable, remplacez temp par:

((temp1,temp2))
5
Victor Juliet

L'indexation du premier élément de la file d'attente devrait fonctionner. Si vous utilisez la bibliothèque heapq , le document mentionne:

La propriété intéressante d'un tas est que son plus petit élément est toujours la racine, heap[0].

2
Aayush Kumar

En supposant que vos éléments stockés dans PriorityQueue sont un tuple (clé, valeur),

def peak(pq):
  return pq.queue[0][1] 
2
hamster ham