Listas de intercalación en Python

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?

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') --> ADEBFC" # 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)) 

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] 

É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] 

Podrías hacer algo simple usando funciones incorporadas:

 sum(zip(list_a, list_b),())