str separar reemplazar por palabras funcion contar concatenar comparar caracteres caracter cadenas python list

separar - str en python



Listas de intercalado en Python (4)

Esta pregunta ya tiene una respuesta aquí:

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))