Python: переплетение двух списков Что такое pythonic способ сделать следующее: У меня есть два списка a и b той же длины n, и я хочу создать список c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]] Ответ 1 c = [item for pair in zip(a, b) for item in pair] Прочитайте документацию о zip. Для сравнения с ответом Ignacio см. этот вопрос: Как преобразовать кортеж кортежей в одномерный список, используя понимание списка? Ответ 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()
Ответ 1 c = [item for pair in zip(a, b) for item in pair] Прочитайте документацию о zip. Для сравнения с ответом Ignacio см. этот вопрос: Как преобразовать кортеж кортежей в одномерный список, используя понимание списка?
Ответ 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()