Pop-Maximalwert aus einem Heapq-Python, Gibt es einen Max-Heap in Python?[doppelt]
Frage
Mögliches Duplikat:
Was verwende ich für eine Max-Heap-Implementierung in Python?
Ich versuche, den Heapq von Python auf irgendeine Weise zu implementieren, aber für einen maximalen Heap.Eine Lösung ist die Verwendung von (-1) und mehreren mit Nummern der Warteschlange, aber das hilft mir nicht, da ich URLs im Heap speichern muss.Also möchte ich einen maximalen Heapq, bei dem ich den größten Wert platzieren kann.
Lösung
Wickeln Sie die Objekte in einen Reverse-Comparing-Wrapper:
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)
Nutzung:
import heapq
letters = 'axuebizjmf'
heap = map(ReverseCompare, letters)
heapq.heapify(heap)
print heapq.heappop(heap) # prints z
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow