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.

War es hilfreich?

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
scroll top