Какой питонский способ сделать следующее:
У меня есть два списка a и b одинаковой длины n, и я хочу сформировать список
a
b
n
c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]]
c = [item for pair in zip(a, b) for item in pair]
Прочтите документацию о zip .
Для сравнения с ответом Игнасио см. Этот вопрос: Как преобразовать кортеж в одно-размерный список с использованием списка понимания?
c = list(itertools.chain.from_iterable(itertools.izip(a, b)))
c = [item for t in zip(a,b) for item in t]
Вот еще один способ:
sum(([x,y] for (x,y) in zip(a,b)), [])
(Возможно, не очень эффективно, поскольку вы формируете как временные кортежи (x, y), так и временные списки [x, y].)
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)]
что, конечно, менее читабельно
Как насчет этого (проверено на Python 2 и 3):
list(sum(zip(a, b), ()))
или в numy:
import numpy as np np.vstack((a, b)).T.flatten().tolist()