2017-09-14 5 views
2

J'ai ce code:éléments de commutation dans PriorityQueue

q = PriorityQueue() 
a = ((1, 1), 10, 0) 
q.put(a) 
newTuple = ((1,1), 8, 0) 
res = any(newTuple[0] in item for item in q.queue) #res = true 

Actuellement, je vérifie si newTuple [0] (ie (1,1)) existe dans toute tuple dans le PriorityQueue. Je voudrais modifier le code pour qu'il vérifie si newTuple [0] est dans la file d'attente, et si c'est effectivement le cas (et est donc associé à un tuple 'a'), remplace ce tuple 'a' dans la file d'attente avec newTuple si newTuple [1] (ie, 8) est inférieur à [1] (ie, 10).

Est-ce possible?

+0

Si vous voulez m'affecter, pouvez-vous me dire comment je peux m'améliorer? –

+1

à ma connaissance 'PriorityQueue' est enroulé autour de' heapq', bien sûr vous pouvez modifier 'q.queue', mais vous devez le re-heapify. Pourquoi ne pas utiliser 'heapq' directement? – georgexsh

Répondre

1

Si vous souhaitez accéder plus flexible et modifier la valeur de la file d'attente, vous pouvez peut-être essayer heapq au lieu de PriorityQueue

import heapq 

heap = [((1, 1), 10, 0)] 
heapq.heapify(heap) 
for x in heap: 
    print x, 

vous pouvez rechercher le tas, car il est une liste, et le remplacer directement. C'est une bonne alternative.