itertools: combinatória
Gere permutações, combinações e produtos cartesianos.
itertools: combinatória é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Visão geral da combinatória
itertools fornece quatro funções combinatórias: 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) calcula o produto cartesiano — equivalente a laços for aninhados.
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) produz todas as disposições ordenadas de comprimento 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)) # 6combinations()
combinations(it, r) produz todas as seleções não ordenadas de comprimento r, sem repetição. 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)) # 6combinations_with_replacement()
combinations_with_replacement(it, r) permite que um elemento apareça mais de uma vez em uma combinação.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Contando sem materializar
Use math.perm, math.comb ou o atalho len() (que funciona para resultados finitos) em vez de gerar todos os elementos apenas para contá-los.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Geração de senhas/chaves
Os iteradores combinatórios são úteis para gerar chaves candidatas ou casos de teste sem carregar tudo na memória.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingCoordenadas de grade com product
Use product(range(rows), range(cols)) para percorrer uma grade 2D sem laços aninhados.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Testando todos os subconjuntos
Gere todos os subconjuntos de uma lista iterando sobre combinations para cada comprimento de 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)Eliminando duplicatas com combinations
Use combinations para comparar cada par de elementos exatamente uma vez, evitando comparações duplicadas entre (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}")Considerações de desempenho
As sequências combinatórias crescem muito rapidamente. permutations(range(12)) produz 479 milhões de resultados. Use sempre geradores e materialize apenas o que for necessário.
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ção rápida
Qual função de itertools produz todos os pares não ordenados (sem repetição) de uma coleção?
Recapitulação
Use product para produtos cartesianos, permutations para disposições ordenadas, combinations para subconjuntos não ordenados e combinations_with_replacement quando os elementos puderem se repetir. Processe sempre os iteradores combinatórios de forma preguiçosa.
Perguntas Frequentes
A aula “itertools: combinatória” é grátis?
Sim — o texto completo de “itertools: combinatória” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “itertools: combinatória”?
Gere permutações, combinações e produtos cartesianos. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “itertools: combinatória”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- itertools: iteradores infinitos e finitos
- itertools: combinatória
- functools: partial e reduce
- functools: lru_cache e cached_property