from itertools import cycle from collections import deque def roundrobin(*iterables): q = deque(iter(it) for it in iterables) for itr in cycle(q): try: yield itr.next() except StopIteration: if len(q) > 0: q.pop() else: break # EXAMPLE for letter in roundrobin('ABC', 'DE', 'FGH'): print letter # prints 'A', 'D', 'F', 'B', 'E', 'G', 'C', 'H'