Python: maneira mais curta de intercalar itens de duas listas

9

Estou tentando obter o caminho mais curto (caractere possível) para obter a Lista 3.

As listas 1 e 2 já me são apresentadas como argumentos e têm o mesmo comprimento.

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']

E a Lista 3 deve ter a aparência (sim, precisa ser uma lista):

l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]
Matias
fonte
2
É seu objetivo para literalmente saída a lista específica l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]dada l1 = [1, 2, 3, 4, 5]e l2 = ['a', 'b', 'c', 'd', 'e']já atribuído, ou é a ideia de que l1e l2poderia ser quaisquer duas listas do mesmo tamanho?
Xnor

Respostas:

13

Zip and Sum

[*sum(zip(l2,l1),())]

Experimente online!

Fecha as duas listas e adiciona todas as tuplas para formar uma lista combinada. O zip funciona apenas se as listas tiverem o mesmo tamanho, caso contrário, truncará a lista mais longa.

Adicionado o ambiente [* ]para transformá-lo em uma lista, como sugere FryAmTheEggman.

Brincadeira
fonte
2
Se você estiver usando o Python 2, poderá usar apenas ao listinvés de [* (...) ]+3 bytes.
Erik the Outgolfer
6

Atribuição de fatia

c=a*2
c[1::2]=a
c[::2]=b

São três bytes mais longos do que a solução de Jo King c=[*sum(zip(b,a),())], mas são bacanas. Pode ser mais curto situacionalmente (embora não consiga pensar onde).

Lynn
fonte