itertools: calcolo combinatorio
Generi permutazioni, combinazioni e prodotti cartesiani.
itertools: calcolo combinatorio è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Panoramica sulla combinatoria
itertools offre quattro funzioni combinatorie: product, permutations, combinations e 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) calcola il prodotto cartesiano, equivalente a cicli for annidati.
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) restituisce tutte le disposizioni ordinate di lunghezza r. Totale: 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)) # 6combinations()
combinations(it, r) restituisce tutte le selezioni non ordinate di lunghezza r, senza ripetizioni. Totale: 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)) # 6combinations_with_replacement()
combinations_with_replacement(it, r) consente a un elemento di comparire più di una volta in una combinazione.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Contare senza materializzare
Utilizzi math.perm, math.comb o la scorciatoia len() (valida per risultati finiti) invece di generare tutti gli elementi solo per contarli.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Generazione di password e chiavi
Gli iteratori combinatori sono utili per generare chiavi candidate o casi di test senza caricare tutto in memoria.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingCoordinate di una griglia con product
Utilizzi product(range(rows), range(cols)) per scorrere una griglia 2D senza cicli annidati.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Testare tutti i sottoinsiemi
Generi tutti i sottoinsiemi di una lista iterando su combinations per ogni lunghezza da 0 a 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)Eliminare i duplicati con combinations
Utilizzi combinations per confrontare ogni coppia di elementi esattamente una volta, evitando i confronti duplicati tra (a,b) e (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}")Considerazioni sulle prestazioni
Le sequenze combinatorie crescono molto rapidamente. permutations(range(12)) produce 479 milioni di risultati. Utilizzi sempre generatori e materializzi solo ciò che serve.
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 earlyVerifica rapida
Quale funzione di itertools produce tutte le coppie non ordinate, senza ripetizioni, di una collezione?
Riepilogo
Utilizzi product per i prodotti cartesiani, permutations per le disposizioni ordinate, combinations per i sottoinsiemi non ordinati e combinations_with_replacement quando gli elementi possono ripetersi. Elabori sempre gli iteratori combinatori in modo lazy.
Domande Frequenti
La lezione «itertools: calcolo combinatorio» è gratuita?
Sì — il testo completo di «itertools: calcolo combinatorio» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «itertools: calcolo combinatorio»?
Generi permutazioni, combinazioni e prodotti cartesiani. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «itertools: calcolo combinatorio»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- itertools: iteratori infiniti e finiti
- itertools: calcolo combinatorio
- functools: partial e reduce
- functools: lru_cache e cached_property