Python Itertools : utilitaires d'itération hautes performances

Apprenez le module itertools de Python. Maîtrisez les itérateurs infinis, les combinaisons, les permutations, le regroupement et le traitement des données économe en mémoire.

Essayez dans l'éditeur

Aperçu

Le module `itertools` intégré à Python est une collection d'outils pour gérer les itérateurs. Un itérateur est un objet qui génère des éléments de manière séquentielle, et « itertools » fournit des fonctions hautement optimisées, implémentées en C, qui peuvent chaîner, filtrer, regrouper et combiner ces itérateurs. En tirant parti de ces outils au lieu d'écrire des boucles imbriquées et des copies de listes, vous pouvez accélérer considérablement l'exécution et réduire la surcharge de mémoire de vos pipelines de données.

Le module itertools classe ses outils en trois groupes principaux. Il y a d'abord les itérateurs infinis comme `count()` (qui compte indéfiniment), `cycle()` (qui parcourt une collection à plusieurs reprises) et `repeat()`. Deuxièmement, il y a les itérateurs combinatoires tels que `permutations()` et `combinations()`, qui sont incroyablement utiles pour la modélisation mathématique, l'optimisation et la génération de permutations de jeu. Troisièmement, les itérateurs de terminaison comme `accumulate()` et `groupby()`.

Un outil particulièrement puissant est `itertools.groupby()`, qui regroupe les clés et valeurs consécutives dans un itérable. Un autre est `itertools.chain()`, qui relie plusieurs itérables entre eux afin qu'ils puissent être traités comme une seule liste continue sans copier d'éléments. Lorsque vous travaillez avec de grands ensembles de données, l'utilisation d'itertools garantit que vous traitez les éléments paresseusement, en les évaluant uniquement lorsque cela est nécessaire, en préservant la mémoire du serveur et en maximisant le débit.

Sortie de code et d'exécution

Enchaîner des collections et générer des combinaisons mathématiques à l'aide d'itertools.

itertools_demo.py
Essayez dans l'éditeur
import itertools

# Chaining iterables together
list_a = [1, 2]
list_b = [3, 4]
combined = list(itertools.chain(list_a, list_b))
print(f"Combined via chain: {combined}")

# Generating combinations (choose 2 items out of 3)
items = ["A", "B", "C"]
combos = list(itertools.combinations(items, 2))
print(f"Combinations (2 of 3): {combos}")

# Cycle through a list (limited to prevent infinite loop)
cycler = itertools.cycle(["Red", "Blue"])
cycle_output = [next(cycler) for _ in range(4)]
print(f"Cycle sequence: {cycle_output}")
Sortie terminale
Combined via chain: [1, 2, 3, 4]
Combinations (2 of 3): [('A', 'B'), ('A', 'C'), ('B', 'C')]
Cycle sequence: ['Red', 'Blue', 'Red', 'Blue']

Mise en œuvre étape par étape

  • Générer des mouvements possibles ou des permutations de mots de passe dans des algorithmes
  • Regroupement des entrées d'un ensemble de données relationnelles (comme le regroupement des transactions par mois)
  • Créer des files d'attente circulaires ou des tours tournants dans les jeux

Foire aux questions

Pourquoi itertools améliore-t-il les performances ?

Parce que ses fonctions renvoient des itérables paresseux (évaluant les éléments un par un) et sont écrites dans du code C rapide et compilé dans l'interpréteur Python.

Quelle est la différence entre les combinaisons et les permutations ?

Les combinaisons ignorent l'ordre (('A', 'B') est identique à ('B', 'A')), tandis que les permutations traitent l'ordre comme unique et renvoient les deux arrangements.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.