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