Interleave multiple lists of the same length in Python
In Python, is there a good way to interleave two lists of the same length?
Say I'm given [1,2,3]
and [10,20,30]
. I'd like to transform those into [1,10,2,20,3,30]
.
Having posted the question, I've realised that I can simply do the following:
[val for pair in zip(l1, l2) for val in pair]
where l1
and l2
are the two lists.
If there are N lists to interleave, then
lists = [l1, l2, ...]
[val for tup in zip(*lists) for val in tup]
For Python>=2.3, there's extended slice syntax:
>>> a = [0, 2, 4, 6, 8]
>>> b = [1, 3, 5, 7, 9]
>>> c = a + b
>>> c[::2] = a
>>> c[1::2] = b
>>> c
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
The line c = a + b
is used as a simple way to create a new list of exactly the right length (at this stage, its contents are not important). The next two lines do the actual work of interleaving a
and b
: the first one assigns the elements of a
to all the even-numbered indexes of c
; the second one assigns the elements of b
to all the odd-numbered indexes of c
.