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
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.
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.
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))
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]
.
En supposant que vos éléments stockés dans PriorityQueue sont un tuple (clé, valeur),
def peak(pq):
return pq.queue[0][1]