हीप दस्तावेज़ीकरण के अनुसार , ढेर आदेश को अनुकूलित करने का तरीका यह है कि ढेर पर प्रत्येक तत्व एक टपल हो, पहला टपल तत्व एक है जो सामान्य पायथन तुलनाओं को स्वीकार करता है।
हीपेक मॉड्यूल में कार्य थोड़ा बोझिल होते हैं (क्योंकि वे ऑब्जेक्ट-ओरिएंटेड नहीं होते हैं), और हमेशा हमारे हीप ऑब्जेक्ट (एक ढेर सूची) को पहले पैरामीटर के रूप में स्पष्ट रूप से पारित करने की आवश्यकता होती है। हम एक साधारण रैपर क्लास बनाकर एक पत्थर से दो पक्षियों को मार सकते हैं जो हमें एक keyफ़ंक्शन को निर्दिष्ट करने और ढेर को एक वस्तु के रूप में प्रस्तुत करने की अनुमति देगा ।
नीचे दिया गया वर्ग एक आंतरिक सूची रखता है, जहां प्रत्येक तत्व एक टपल है, जिसमें से पहला सदस्य एक कुंजी है, जो keyपैरामीटर का उपयोग करके तत्व सम्मिलन समय पर गणना की जाती है , हीप तात्कालिकता में पारित किया गया है:
import heapq
class MyHeap(object):
def __init__(self, initial=None, key=lambda x:x):
self.key = key
self.index = 0
if initial:
self._data = [(key(item), i, item) for i, item in enumerate(initial)]
self.index = len(self._data)
heapq.heapify(self._data)
else:
self._data = []
def push(self, item):
heapq.heappush(self._data, (self.key(item), self.index, item))
self.index += 1
def pop(self):
return heapq.heappop(self._data)[2]
(अतिरिक्त self.indexहिस्सा झड़पों से बचने के लिए है जब मूल्यांकित कुंजी मान एक ड्रॉ है और संग्रहीत मूल्य सीधे तुलना करने योग्य नहीं है - अन्यथा टाइपकेयर के साथ हीपैक विफल हो सकता है)