Skip to content

Instantly share code, notes, and snippets.

@mjpieters
Created January 22, 2013 16:36
Show Gist options
  • Save mjpieters/4596098 to your computer and use it in GitHub Desktop.
Save mjpieters/4596098 to your computer and use it in GitHub Desktop.
Generator to yield items from a series of sorted iterables in merged order.
import operator
def mergeiter(*iterables):
"""Given a set of sorted iterables, yield the next value in merged order"""
iterables = [iter(it) for it in iterables]
iterables = {i: [next(it), i, it] for i, it in enumerate(iterables)}
while True:
value, i, it = min(iterables.values(), key=operator.itemgetter(0))
yield value
try:
iterables[i][0] = next(it)
except StopIteration:
del iterables[i]
if not iterables:
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment