0Pricing
Python Academy · Aula

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

combinations()

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

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

Geraçã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 materialising

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

Verificaçã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

  1. itertools: iteradores infinitos e finitos
  2. itertools: combinatória
  3. functools: partial e reduce
  4. functools: lru_cache e cached_property
← Voltar para Python Academy