Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 4 de 424/36 en el curso~12 min
Lecciones del módulo (4/4)

itertools esenciales

Python expone muchas herramientas de iteración: algunas son nativas (siempre disponibles), otras viven en el módulo itertools de la biblioteca estándar. Aquí están las más importantes.

enumerate: índice + valor

Cuando necesitas tanto el índice como el elemento durante un bucle:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# comenzar desde otro número:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: iterar en paralelo

Combina múltiples iterables elemento por elemento:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

zip se detiene en el iterable más corto. Para un zip "largo" usa itertools.zip_longest.

Construir un diccionario a partir de dos listas paralelas:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: concatenar iterables

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Sin crear una lista intermedia: útil para archivos, generadores, etc.

itertools.count y repeat: iteradores infinitos

Python
from itertools import count, repeat

# count(start, step) — enteros infinitos crecientes
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — repete el mismo valor n veces (o infinitamente sin n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Todas las combinaciones (sin repeticiones, independientes del orden) de una longitud dada:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Variante ordenada: permutations. Variantes con repetición: combinations_with_replacement y product.

zip() para diccionarios e iterables no balanceados

La función zip() se detiene tan pronto como se agota el iterable de entrada más corto. Si deseas emparejar elementos y conservar cualquier valor excedente (rellenándolos con un valor predeterminado como None), puedes usar zip_longest() del módulo itertools. Además, puedes pasar el resultado de un zip directamente a dict() para construir instantáneamente un mapa clave-valor.

Pruébalo tú

Ejercicio#python.m6.l4.e1
Intentos: 0Cargando...

Dadas las listas paralelas `countries = ['Italia', 'Francia', 'Spagna']` y `capitals = ['Roma', 'Parigi', 'Madrid']`, construye `mapping` como un diccionario {country: capital}. Evalúa `mapping`.

Cargando editor...
Mostrar pista

dict(zip(countries, capitals))

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m6.l4.e2
Intentos: 0Cargando...

Dada la lista `words = ['ciao', 'mondo', 'python']`, construye `enumerated_items` como una lista de tuplas (i, word) comenzando desde i=1. Evalúa `enumerated_items`.

Cargando editor...
Mostrar pista

enumerate(words, start=1) → tuplas (i, valor).

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m6.l4.e3
Intentos: 0Cargando...

Dadas dos listas `keys = ['a', 'b', 'c']` y `values = [10, 20, 30]`, usa `zip` para emparejarlas y convierte el resultado en un diccionario. Guarda el diccionario resultante en `my_dict` y evalúalo.

Cargando editor...
Mostrar pista

Usa dict(zip(keys, values)) y asígnalo a my_dict.

Solución disponible después de 3 intentos