"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment compresser des listes de tailles différentes à l'aide de « itertools.cycle » en Python ?

Comment compresser des listes de tailles différentes à l'aide de « itertools.cycle » en Python ?

Publié le 2024-11-24
Parcourir:925

How to Zip Differently Sized Lists Using `itertools.cycle` in Python?

Compression de listes de tailles différentes à l'aide des fonctions intégrées

Alors que la fonction zip intégrée est incapable de répéter la liste la plus courte lors de la fusion de deux des listes de tailles différentes, vous pouvez exploiter la fonction itertools.cycle pour obtenir ce résultat.

cycle du package Python itertools crée un itérateur qui renvoie à plusieurs reprises éléments d’un itérable, même après son épuisement. En combinant zip avec cycle, il est possible de gérer l'écart de taille entre les listes et de garantir que la liste la plus longue est répétée si nécessaire.

Exemple :

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = ["A", "B", "C"]

# Use itertools.cycle to repeat the shorter list
from itertools import cycle
zip_list = zip(A, cycle(B)) if len(A) > len(B) else zip(cycle(A), B)

Dans cet exemple :

  • if len(A) > len(B) vérifie si la première liste (A) est plus longue que la seconde (B).
  • Si tel est le cas, il utilise zip pour fusionner A avec un itérateur cyclique de B, répétant efficacement B tout au long du résultat fusionné.
  • Si B est plus long, il inverse l'ordre et cycle A à la place.

Résultat :

zip_list contiendra les tuples suivants en tant qu'objet générateur :

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'A'), (5, 'B'), (6, 'C'), (7, 'A'), (8, 'B'), (9, 'C')]

Comment ça marche :

itertools.cycle crée une copie de l'itérable (dans ce cas, B) et renvoie ses éléments à plusieurs reprises. Lorsque zip parcourt A, il associe chaque élément avec le prochain élément disponible de l'itérateur cyclique.

Si A est plus court que B, le processus recommence depuis le début de B une fois son itérateur épuisé. À l’inverse, si A est plus long, l’itérateur B effectue un cycle continu pour remplir le reste de la liste fusionnée.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3