How do I merge two python iterators?
You can do something that is almost exaclty what @Pramod first suggested.
def izipmerge(a, b):
for i, j in itertools.izip(a,b):
yield i
yield j
The advantage of this approach is that you won't run out of memory if both a and b are infinite.
I also agree that itertools is not needed.
But why stop at 2?
def tmerge(*iterators):
for values in zip(*iterators):
for value in values:
yield value
handles any number of iterators from 0 on upwards.
UPDATE: DOH! A commenter pointed out that this won't work unless all the iterators are the same length.
The correct code is:
def tmerge(*iterators):
empty = {}
for values in itertools.zip_longest(*iterators, fillvalue=empty):
for value in values:
if value is not empty:
yield value
and yes, I just tried it with lists of unequal length, and a list containing {}.
A generator will solve your problem nicely.
def imerge(a, b):
for i, j in itertools.izip(a,b):
yield i
yield j