0Pricing
Python Academy · Leçon

itertools : combinatoire

Générez des permutations, des combinaisons et des produits cartésiens.

itertools : combinatoire est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

Vue d’ensemble de la combinatoire

itertools fournit quatre fonctions combinatoires : product, permutations, combinations et combinations_with_replacement.

import itertools

# All orderings of 2 items from ABC
print(list(itertools.permutations("ABC", 2)))
# [(A,B),(A,C),(B,A),(B,C),(C,A),(C,B)]

product()

product(*iterables, repeat=1) calcule le produit cartésien, ce qui équivaut à des boucles for imbriquées.

import itertools

print(list(itertools.product([1,2], ["a","b"])))
# [(1,"a"),(1,"b"),(2,"a"),(2,"b")]

# repeat=2 pairs each element with itself
print(list(itertools.product(range(2), repeat=2)))
# [(0,0),(0,1),(1,0),(1,1)]

permutations()

permutations(it, r) renvoie tous les arrangements ordonnés de longueur r. Total : P(n,r) = n!/(n-r)!.

import itertools

result = list(itertools.permutations([1,2,3], 2))
print(result)
# [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]
print(len(result))  # 6

combinations()

combinations(it, r) renvoie les sélections non ordonnées de longueur r, sans répétition. Total : C(n,r) = n!/(r!(n-r)!).

import itertools

result = list(itertools.combinations([1,2,3,4], 2))
print(result)
# [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
print(len(result))  # 6

combinations_with_replacement()

combinations_with_replacement(it, r) autorise un élément à apparaître plusieurs fois dans une combinaison.

import itertools

result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]

Compter sans matérialiser

Utilisez math.perm, math.comb ou le raccourci len() (qui fonctionne pour les résultats finis) plutôt que de générer tous les éléments uniquement pour les compter.

import math

print(math.perm(10, 3))   # 720
print(math.comb(10, 3))   # 120

Génération de mots de passe et de clés

Les itérateurs combinatoires sont utiles pour générer des clés candidates ou des cas de vérification sans tout charger en mémoire.

import itertools, string

chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
    pass  # process without materialising

Coordonnées d’une grille avec product

Utilisez product(range(rows), range(cols)) pour parcourir une grille en deux dimensions sans boucles imbriquées.

import itertools

for row, col in itertools.product(range(3), range(3)):
    print(f"({row},{col})", end=" ")

Vérifier tous les sous-ensembles

Générez tous les sous-ensembles d’une liste en parcourant combinations pour chaque longueur de 0 à n.

import itertools

items = [1, 2, 3]
all_subsets = []
for r in range(len(items)+1):
    all_subsets.extend(itertools.combinations(items, r))
print(all_subsets)

Éliminer les doublons avec combinations

Utilisez combinations pour comparer chaque paire d’éléments exactement une fois, en évitant les comparaisons en double entre (a,b) et (b,a).

import itertools

words = ["apple","apricot","banana","blueberry"]
for a, b in itertools.combinations(words, 2):
    if a[0] == b[0]:
        print(f"Same letter: {a}, {b}")

Considérations relatives aux performances

Les suites combinatoires croissent très rapidement. permutations(range(12)) produit 479 millions de résultats. Utilisez toujours des générateurs et ne matérialisez que ce dont vous avez besoin.

import itertools, math

n = 12
print(f"P(12,12) = {math.factorial(n):,}")   # 479,001,600
# Never: list(itertools.permutations(range(12)))
# Instead: iterate lazily and break early

Vérification rapide

Quelle fonction d’itertools produit toutes les paires non ordonnées, sans répétition, d’une collection ?

Récapitulatif

Utilisez product pour les produits cartésiens, permutations pour les arrangements ordonnés, combinations pour les sous-ensembles non ordonnés et combinations_with_replacement lorsque les éléments peuvent se répéter. Traitez toujours les itérateurs combinatoires de manière paresseuse.

Questions Fréquemment Posées

La leçon « itertools : combinatoire » est-elle gratuite ?

Oui — le texte complet de « itertools : combinatoire » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « itertools : combinatoire » ?

Générez des permutations, des combinaisons et des produits cartésiens. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « itertools : combinatoire » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. itertools : itérateurs infinis et finis
  2. itertools : combinatoire
  3. functools : partial et reduce
  4. functools : lru_cache et cached_property
← Retour à Python Academy