#! /usr/bin/python3
# ==================================================================
# From: www.youtube.com/watch?v=o9pEzgHorH0
# Stop Writing Classes (YouTube)
# ==================================================================
#
# heapq module provides an implementation of the heap queue
# algorithm, also known as the priority queue algorithm.
#
# See: https://docs.python.org/3/library/heapq.html
#
# ==================================================================
import heapq
class Heap(object):
def __init__(self, data=None, key=lambda x: x[0]):
self.heap = data or []
heapq.heapify(self.heap)
self.key = key
def pushleft(self, item):
if self.key:
item = (self.key(item), item)
##heapq.pushleft(self.heap, item)
heapq.heappush(self.heap, item)
def popleft(self):
##return heapq.popleft(self.heap)[1]
return heapq.heappop(self.heap)[1]
# ------------------------------------------------------------------
# main
# ------------------------------------------------------------------
if __name__ == '__main__':
pq = Heap()
# ---- list
pq.pushleft([9,'abc'])
pq.pushleft([5,'xyz'])
pq.pushleft([3,'bcd'])
pq.pushleft([2,'cde'])
# ---- tuple
pq.pushleft((19,'abc'))
pq.pushleft((15,'xyz'))
pq.pushleft((13,'bcd'))
pq.pushleft((12,'cde'))
l = len(pq.heap) # length of heap
i = 0 # iteration index
##print('pq len={}'.format(len(pq.heap)))
while i < l:
item = pq.popleft()
print(item)
i = i + 1
print('end of pq')