Python: переплетение двух списков

Что такое pythonic способ сделать следующее:

У меня есть два списка a и b той же длины n, и я хочу создать список

c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]]

Ответы

Ответ 2

c = list(itertools.chain.from_iterable(itertools.izip(a, b)))

Ответ 3

c = [item for t in zip(a,b) for item in t]

Ответ 4

c = [item for i in zip(a,b) for item in i]

В качестве альтернативы вы можете попробовать:

c=[(a,b)[i%2][i/2] for i in xrange(2*n)]

что, конечно, менее читаемо

Ответ 5

Вот еще один способ:

sum(([x,y] for (x,y) in zip(a,b)), [])

(Может быть, не очень эффективно, так как вы формируете временные кортежи (x, y) и временные списки [x, y].)

Ответ 6

Как насчет этого (тестируется на Python 2 и 3):

list(sum(zip(a, b), ()))

или в numpy:

import numpy as np
np.vstack((a, b)).T.flatten().tolist()