0Pricing
Python Academy · Lezione

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))  # 6

combinations()

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))  # 6

combinations_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))   # 120

Generazione 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 materialising

Coordinate 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 early

Verifica 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

  1. itertools: iteratori infiniti e finiti
  2. itertools: calcolo combinatorio
  3. functools: partial e reduce
  4. functools: lru_cache e cached_property
← Torna a Python Academy