matplot - Python: entrelazando dos listas
title matplot (6)
¿Cuál es la forma pitónica de hacer lo siguiente:
Tengo dos listas a
y b
de la misma longitud n
, y quiero formar la lista
c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]]
¿Qué tal este (probado en Python 2 y 3):
list(sum(zip(a, b), ()))
o en numpy:
import numpy as np
np.vstack((a, b)).T.flatten().tolist()
Aquí hay otra manera:
sum(([x,y] for (x,y) in zip(a,b)), [])
(Tal vez no sea muy eficiente ya que forman tuplas temporales (x, y) y listas temporales [x, y].)
c = [item for i in zip(a,b) for item in i]
Alternativamente puedes probar:
c=[(a,b)[i%2][i/2] for i in xrange(2*n)]
que por supuesto es menos legible
c = [item for pair in zip(a, b) for item in pair]
Lea la documentación sobre zip .
Para comparar con la respuesta de Ignacio, vea esta pregunta: ¿Cómo convierto una tupla de tuplas a una lista unidimensional utilizando la comprensión de la lista?
c = [item for t in zip(a,b) for item in t]
c = list(itertools.chain.from_iterable(itertools.izip(a, b)))