Question

Duplicata Possible:
Qu'est-ce que j'utilise pour une implémentation max-heap en Python?

J'essaie d'implémenter d'une certaine manière le heapq de python mais pour un tas maximum.Une solution consiste à utiliser le (-1) et le multiple avec les numéros de la file d'attente, mais cela ne m'aide pas car j'ai besoin de stocker des URL dans le tas.Je veux donc un tas maximum où je peux afficher la plus grande valeur.

Était-ce utile?

La solution

Enveloppez les objets dans un wrapper de comparaison inverse:

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)

Utilisation:

import heapq
letters = 'axuebizjmf'
heap = map(ReverseCompare, letters)
heapq.heapify(heap)
print heapq.heappop(heap) # prints z
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top