Python: il modo più breve per intercalare elementi da due elenchi


9

Sto cercando di ottenere il modo più breve (carattere possibile) per ottenere l'elenco 3.

L'elenco 1 e l'elenco 2 mi sono già stati dati come argomenti e hanno la stessa lunghezza.

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

E l'elenco 3 dovrebbe apparire come (sì, deve essere un elenco):

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

2
È il vostro obiettivo per letteralmente uscita la lista specifica l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]data l1 = [1, 2, 3, 4, 5]e l2 = ['a', 'b', 'c', 'd', 'e']già assegnato, o è l'idea che l1e l2potrebbe essere qualsiasi due liste della stessa lunghezza?
xnor

Risposte:


13

Zip e somma

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

Provalo online!

Comprime le due liste insieme quindi aggiunge tutte le tuple per creare una lista combinata. Lo zip funziona solo se gli elenchi hanno la stessa dimensione, altrimenti tronca l'elenco più lungo.

Aggiunto l'ambiente circostante [* ]per trasformarlo in un elenco come suggerisce FryAmTheEggman.


2
Se usi Python 2, puoi semplicemente usare listinvece di [* (...) ]per +3 byte.
Erik the Outgolfer

6

Assegnazione delle sezioni

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

Questo è di tre byte più lungo rispetto all'utilizzo della soluzione di Jo King c=[*sum(zip(b,a),())], ma è elegante. Potrebbe essere più breve in base alla situazione (non riesco a pensare a dove, però).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.