def interleave_skip(iterables, limit=None):
    """Like `chain.from_iterable(zip(*iterables))` but doesn't stop at the end of shortest iterable

    TODO: equivalent to chain.from_iterable(izip_longest(*iterables)) if obj is not None)

    >>> tuple(interleave_skip(s for s in ('ABCD', 'vwxyz', '12')))
    ('A', 'v', '1', 'B', 'w', '2', 'C', 'x', 'D', 'y', 'z')
    >>> list(interleave_skip((g for g in [xrange(10), xrange(20,25,1)])))
    [0, 20, 1, 21, 2, 22, 3, 23, 4, 24, 5, 6, 7, 8, 9]
    """

    iterators = map(iter, iterables)
    while iterators:
        for i, it in enumerate(iterators):
            try:
                yield next(it)
            except StopIteration:
                del iterators[i]