Python: le moyen le plus court d'entrelacer des éléments de deux listes

9

J'essaie d'obtenir le moyen le plus court (caractère possible) pour obtenir la liste 3.

La liste 1 et la liste 2 m'ont déjà été fournies comme arguments et ont la même longueur.

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

Et la liste 3 devrait ressembler (oui, il doit s'agir d'une liste):

l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]
Matias
la source
2
Votre objectif est-il de produire littéralement la liste spécifique l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]donnée l1 = [1, 2, 3, 4, 5]et l2 = ['a', 'b', 'c', 'd', 'e']déjà attribuée, ou l'idée est-elle l1et l2pourrait-elle être deux listes de même longueur?
xnor

Réponses:

13

Zip et somme

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

Essayez-le en ligne!

Zips les deux listes ensemble puis ajoute tous les tuples pour faire une liste combinée. Le zip ne fonctionne que si les listes sont garanties de la même taille, sinon il tronque la liste la plus longue.

Ajout de l'environnement [* ]pour le transformer en liste comme le suggère FryAmTheEggman.

Jo King
la source
2
Si vous utilisez Python 2, vous pouvez simplement utiliser listau lieu de [* (...) ]+3 octets.
Erik the Outgolfer
6

Affectation de tranche

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

C'est trois octets de plus que d'utiliser la solution de Jo King c=[*sum(zip(b,a),())], mais c'est astucieux. Cela pourrait être plus court dans la situation (je ne peux pas penser à où, cependant).

Lynn
la source