Python: переплетение двух списков - PullRequest
16 голосов
/ 15 июня 2011

Какой питонский способ сделать следующее:

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

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

Ответы [ 6 ]

21 голосов
/ 15 июня 2011
c = [item for pair in zip(a, b) for item in pair]

Прочтите документацию о zip .


Для сравнения с ответом Игнасио см. Этот вопрос: Как преобразовать кортеж в одно-размерный список с использованием списка понимания?

10 голосов
/ 15 июня 2011
c = list(itertools.chain.from_iterable(itertools.izip(a, b)))
7 голосов
/ 15 июня 2011
c = [item for t in zip(a,b) for item in t]
1 голос
/ 15 июня 2011

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

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

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

1 голос
/ 15 июня 2011
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)]

что, конечно, менее читабельно

0 голосов
/ 17 ноября 2015

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

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

или в numy:

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