4 votes

joindre deux listes qui n'ont pas la même longueur, en répétant la plus courte.

J'ai deux listes :

l1 = [1,2,3,4,5]
l2 = ["a","b","c"]

Le résultat que j'attendais :

l3 = [(1,"a"),(2,"b"),(3,"c"),(4,"a"),(5,"b")]

En fait, je cherche à joindre deux listes et lorsqu'elles ne sont pas de même longueur, je dois répartir les éléments de l'autre liste en répétant depuis le début.

J'ai essayé :

en utilisant zip() mais c'est mauvais pour ce cas car il joint avec une longueur égale

>>> list(zip(l1,l2))
[(1, 'a'), (2, 'b'), (3, 'c')]

7voto

yatu Points 39897

Vous pouvez utiliser itertools.cycle de sorte que zip regroupe des éléments provenant à la fois de l1 et un vélo version de l2 :

from itertools import cycle

list(zip(l1, cycle(l2)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'a'), (5, 'b')]

cycle est très utile lorsque l'itérable sur lequel vous effectuez un cycle est combiné ou zippé avec d'autres itérables, de sorte que le processus d'itération s'arrête dès qu'un autre itérable est épuisé. Sinon, il continuera à tourner indéfiniment (dans le cas où il n'y a qu'une seule et unique cycle générateur ou aussi que toutes les autres itérables sont également infinies comme le souligne @chepner).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X