separar - str en python
Listas de intercalado en Python (4)
Esta pregunta ya tiene una respuesta aquí:
- Intercale varias listas de la misma longitud en Python 7 respuestas
- Fusionar / agregar listas en Python 8 respuestas
Tengo dos listas:
[a, b, c] [d, e, f]
Quiero:
[a, d, b, e, c, f]
¿Qué es una forma simple de hacer esto en Python?
Éste funciona solo en Python 2.x, pero funcionará para listas de diferentes longitudes:
[y for x in map(None,lis_a,lis_b) for y in x]
Aquí hay un método bastante sencillo utilizando una lista de comprensión:
>>> lists = [[''a'', ''b'', ''c''], [''d'', ''e'', ''f'']]
>>> [x for t in zip(*lists) for x in t]
[''a'', ''d'', ''b'', ''e'', ''c'', ''f'']
O si tuvo las listas como variables separadas (como en otras respuestas):
[x for t in zip(list_a, list_b) for x in t]
Podrías hacer algo simple usando funciones incorporadas:
sum(zip(list_a, list_b),())
Una opción es usar una combinación de chain.from_iterable()
y zip()
:
# Python 3:
from itertools import chain
list(chain.from_iterable(zip(list_a, list_b)))
# Python 2:
from itertools import chain, izip
list(chain.from_iterable(izip(list_a, list_b)))
Edición : Como lo señala sr2222 en los comentarios, esto no funciona bien si las listas tienen diferentes longitudes. En ese caso, dependiendo de la semántica deseada, es posible que desee utilizar la función (mucho más general) roundrobin()
de la sección de recetas de la documentación de itertools
:
def roundrobin(*iterables):
"roundrobin(''ABC'', ''D'', ''EF'') --> A D E B F C"
# Recipe credited to George Sakkis
pending = len(iterables)
nexts = cycle(iter(it).next for it in iterables)
while pending:
try:
for next in nexts:
yield next()
except StopIteration:
pending -= 1
nexts = cycle(islice(nexts, pending))