heapq documentationによれば、ヒープ順序をカスタマイズする方法は、ヒープ上の各要素をタプルにすることです。最初のタプル要素は通常のPython比較を受け入れるものです。
heapqモジュールの関数は少し面倒です(オブジェクト指向ではないため)、ヒープオブジェクト(ヒープリスト)を最初のパラメータとして明示的に渡す必要があります。我々はkey
関数を指定し、オブジェクトとしてヒープを提示することができる非常に単純なラッパークラスを作成することで、2つの鳥を1つのストーンで殺すことができます。
以下のクラスは、各要素がヒープのインスタンスに渡さタプル、key
パラメータを使用して要素の挿入時に計算キー、された第1部材である内部リストを保持:
# -*- coding: utf-8 -*-
import heapq
class MyHeap(object):
def __init__(self, initial=None, key=lambda x:x):
self.key = key
if initial:
self._data = [(key(item), item) for item in initial]
heapq.heapify(self._data)
else:
self._data = []
def push(self, item):
heapq.heappush(self._data, (self.key(item), item))
def pop(self):
return heapq.heappop(self._data)[1]
可能性のある複製http://stackoverflow.com/questions/679731/min-heap-in-python –
可能な複製[heapqを特定の属性のヒープを評価する方法?](http:// stackoverflow .COM /質問/ 3954530 /ハウツー - メイクheapq - 評価 - - - - の固有の属性ヒープオフ) –