Helmut Jarausch wrote: > Hi, > > I'd like to extracted elements from a heapq in a for loop. > I feel my solution below is much too complicated. > How to do it more elegantly? > I know I could use a while loop but I don't like it. > > Many thanks for some lessons in Python. > > Here is my clumsy solution > > from heapq import heappush, heappop > # heappop raises IndexError if heap is empty > > H=[] > for N in 'H','C','W','I' : > heappush(H,N)
H = ["H", "C", "W", "I"] heapq.heapify(H) But see below. > # how to avoid / simplify the following function > > def in_sequence(H) : > try : > while True : > N= heappop(H) > yield N > except IndexError : > raise StopIteration > > # and here the application: > > for N in in_sequence(H) : > print(N) If you are iterating over the complete heap I see no advantage over a sorted list. So for N in sorted(H): print(N) If H is huge use H.sort() instead of sorted() to save memory. If you need only a few items use heapq.nsmallest(). -- https://mail.python.org/mailman/listinfo/python-list