hashq1.py

#! /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:None):
        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()

    pq.pushleft('abc')
    pq.pushleft('xyz')
    pq.pushleft('bcd')
    pq.pushleft('cde')

    while True:
        item = pq.popleft()
        if not item:
            brerak
        print(item)