>>> import itertools >>> a ['1', '2', '3', '4', '5', '6'] >>> b ['a', 'b', 'c', 'd', 'e', 'f'] >>> list(itertools.chain.from_iterable(zip(a,b))) ['1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f']
zip() creates an iteration with the length of the shortest argument. You can either add a[-1] to the result, or use itertools.zip_longest (izip_longest for Python 2.x) with a fill value and subsequently delete that value.
And you can use more than two input sequences with this solution.
In order not to add the last value, you can try this dirty approach, but I really do not recommend it, it is not clear:
>>> a [1, 2, 3, 4, 5] >>> b ['a', 'b', 'c', 'd', 'e', 'f'] >>> [a[i//2] if i%2 else b[i//2] for i in range(len(a)*2+1)] ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5, 'f']
(For Python 2.x use single / )