def merge(iterable_a, iterable_b): sentinel = object() a_iter = iter(iterable_a) b_iter = iter(iterable_b) a = next(a_iter, sentinel) b = next(b_iter, sentinel) while a is not sentinel and b is not sentinel: if a <= b: yield a a = next(a_iter, sentinel) else: yield b b = next(b_iter, sentinel) yield from a_iter yield from b_iter