Pop valore massimo da un heapq python, esiste un max-heap in Python?[duplicare]
Domanda
Possibile duplicato:
Cosa utilizzo per un'implementazione max-heap in Python?
Sto cercando di implementare in qualche modo l'heapq di Python ma per un heap massimo.Una soluzione sta utilizzando (-1) e il multiplo con i numeri della coda, ma questo non mi aiuta perché devo memorizzare gli URL nell'heap.Quindi voglio un heapq massimo in cui posso inserire il valore più grande.
Soluzione
Avvolgi gli oggetti in un involucro di confronto inverso:
import functools
@functools.total_ordering
class ReverseCompare(object):
def __init__(self, obj):
self.obj = obj
def __eq__(self, other):
return isinstance(other, ReverseCompare) and self.obj == other.obj
def __le__(self, other):
return isinstance(other, ReverseCompare) and self.obj >= other.obj
def __str__(self):
return str(self.obj)
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.obj)
Utilizzo:
import heapq
letters = 'axuebizjmf'
heap = map(ReverseCompare, letters)
heapq.heapify(heap)
print heapq.heappop(heap) # prints z
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow