Maison  >  Article  >  développement back-end  >  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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 13:12:30680parcourir

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

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

Bien que la fonction zip intégrée ne puisse pas répéter la liste la plus courte lors de la fusion de deux des listes de tailles différentes, vous pouvez utiliser la fonction itertools.cycle pour obtenir ce résultat.

cycle du package Python itertools crée un itérateur qui renvoie à plusieurs reprises des é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 :

<code class="python">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)</code>

Dans cet exemple :

  • if len(A) > len(B) vérifie si la première liste (A) est plus longue que la seconde (B).
  • Si c'est le cas, il utilise zip pour fusionner A avec un itérateur cyclique de B, répétant effectivement 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 son éléments. 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn