0Pricing
Python Academy · Lección

itertools: combinatoria

Genere permutaciones, combinaciones y productos cartesianos.

itertools: combinatoria es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Descripción general de la combinatoria

itertools proporciona cuatro funciones de combinatoria: product, permutations, combinations y 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 el producto cartesiano, equivalente a varios bucles for anidados.

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) produce todas las disposiciones ordenadas de longitud 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) produce selecciones sin orden de longitud r y sin repetición. 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 un elemento aparezca más de una vez en una combinación.

import itertools

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

Conteo sin materializar

Use math.perm, math.comb o el atajo len() (que funciona con resultados finitos) en lugar de generar todos los elementos solo para contarlos.

import math

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

Generación de contraseñas y claves

Los iteradores de combinatoria resultan útiles para generar claves candidatas o casos de prueba sin cargarlo todo en memoria.

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 una cuadrícula con product

Use product(range(rows), range(cols)) para recorrer una cuadrícula bidimensional sin bucles anidados.

import itertools

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

Prueba de todos los subconjuntos

Genere todos los subconjuntos de una lista iterando sobre combinations para cada longitud desde 0 hasta 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)

Eliminación de duplicados con combinations

Use combinations para comparar cada par de elementos exactamente una vez y evitar las comparaciones duplicadas de (a,b) y (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}")

Consideraciones de rendimiento

Las secuencias combinatorias crecen muy rápidamente. permutations(range(12)) produce 479 millones de resultados. Use siempre generadores y materialice únicamente lo que necesite.

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

Comprobación rápida

¿Qué función de itertools produce todos los pares sin orden (sin repetición) de una colección?

Resumen

Use product para productos cartesianos, permutations para disposiciones ordenadas, combinations para subconjuntos sin orden y combinations_with_replacement cuando los elementos puedan repetirse. Procese siempre los iteradores combinatorios de forma perezosa.

Preguntas frecuentes

¿La lección «itertools: combinatoria» es gratis?

Sí — el texto completo de «itertools: combinatoria» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «itertools: combinatoria»?

Genere permutaciones, combinaciones y productos cartesianos. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «itertools: combinatoria»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. itertools: iteradores infinitos y finitos
  2. itertools: combinatoria
  3. functools: partial y reduce
  4. functools: lru_cache y cached_property
← Volver a Python Academy