Aprende leyendo en orden

Bucles for con range / enumerate / zip

Aprende los bucles for de Python con range, enumerate y zip, y controla el flujo con break y continue.

Hasta ahora hemos aprendido la ramificación con if / elif y las comprobaciones masivas con all() / any().

En este artículo aprenderás la instrucción for para ejecutar el mismo trabajo sobre cada elemento de una lista. Con if y for en tu caja de herramientas, puedes escribir la mayor parte del código práctico del día a día.

Sacar un elemento a la vez con for

Una instrucción for toma un objeto repetible (un iterable) como una lista, tupla, cadena (string) o dict, y saca los elementos uno por uno desde el principio, asignando cada uno a la variable que nombres y ejecutando tu bloque cada vez.

La forma básica es una línea de for variable in iterable: más un bloque indentado con 4 espacios.

Qué hace una iteración de for
listasacar unelementoasignar avariableejecutarbloquesiguiente elementorepetir

Saca un elemento de la colecciónasígnalo a la variableejecuta el bloque → al siguiente, repitiendo hasta que se acaben los elementos.

# Iterar sobre una lista
fruits = ["manzana", "plátano", "naranja"]
for fruit in fruits:
    print(fruit)
# Salida:
# manzana
# plátano
# naranja

# Las cadenas también son iterables (un carácter a la vez)
for ch in "ABC":
    print(ch)
# Imprime A / B / C en orden

No olvides los dos puntos y la indentación de 4 espacios

La línea de for debe terminar con : (dos puntos), y cada línea del bloque debe estar indentada con 4 espacios (o un tabulador). Una indentación inconsistente lanza IndentationError.

Iterar un dict con for

Si pasas un dict directamente a for, solo se sacan las claves en orden. Para obtener también los valores, lo habitual es .items(). Si solo necesitas los valores, usa .values().

FormaLo que obtienesUso típico
for key in d:clavesCuando basta con la clave
for value in d.values():valoresCuando solo necesitas los valores para agregar
for key, value in d.items():pares clave/valorCuando necesitas ambos — para mostrar con formato o filtrar
user = {"name": "ana", "age": 29, "role": "admin"}

# Solo claves
for key in user:
    print(key)
# name / age / role

# Solo valores
for value in user.values():
    print(value)
# ana / 29 / admin

# Claves y valores juntos
for key, value in user.items():
    print(f"{key}: {value}")
# name: ana / age: 29 / role: admin

Calcula el total a partir de un dict de productos y precios unitarios.

① Define prices = {"apple": 180, "bread": 320, "milk": 250}.

② Inicializa total = 0, luego itera sobre .values() con for y suma cada valor a total.

③ Al final imprime el total con print(total).

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

Repetir un número fijo de veces con range()

range(n) es una función integrada que devuelve la secuencia entera de 0 a n-1, y combinada con for es la forma estándar de escribir bucles de cuenta fija. Hay 3 formas comunes de llamarla.

Cómo funciona range()
range(5)0,1,2,3,45 iteracionesproducefor en orden
FormaValores generadosUso
range(5)0, 1, 2, 3, 40 a n-1
range(2, 8)2, 3, 4, 5, 6, 7Especifica inicio y fin (el fin es exclusivo)
range(1, 10, 2)1, 3, 5, 7, 9Especifica inicio, fin y paso
# Iterar de 0 a 4
for i in range(5):
    print(i)
# Imprime 0 1 2 3 4 (5 líneas)

# 2 a 7
for i in range(2, 8):
    print(i)

# 1 a 9 en pasos de 2
for i in range(1, 10, 2):
    print(i)

# Usa _ cuando solo necesitas el conteo, no el valor
for _ in range(3):
    print("reintentando...")

Nombrar la variable del bucle como _ (un guion bajo) es una convención para señalar de inmediato «esta variable no se usa dentro». i o j también funcionarían, pero leer código donde no se usan hace que el lector se detenga y pregunte por qué — así que usa _ cuando solo te importe el conteo.

Calcula la suma de los enteros del 1 al 10.

① Inicializa total = 0.

② Usa for y range() para sumar del 1 al 10 a total.

③ Imprime el total con print(total).

Editor Python

Ejecutar el código para ver el resultado

enumerate y zip para índices y listas paralelas

En código del mundo real, a menudo quieres la posición de cada elemento también, o quieres iterar sobre varias listas en paralelo. enumerate() y zip() lo hacen mucho más corto y legible.

enumerate() — iterar con un índice

Envolver una lista en enumerate(lista) te da pares (índice, elemento) en orden. Es útil para mostrar rankings o números de línea en mensajes de error — en cualquier sitio donde quieras adjuntar «cuál» a cada valor.

products = ["manzana", "pan", "leche"]

for index, name in enumerate(products):
    print(f"{index}: {name}")
# 0: manzana
# 1: pan
# 2: leche

# Para empezar en 1, pasa el inicio como segundo argumento
for rank, name in enumerate(products, 1):
    print(f"#{rank}: {name}")
# #1: manzana / #2: pan / #3: leche

zip() — iterar varias listas en paralelo

zip(lista1, lista2, ...) te permite sacar elementos del mismo índice juntos desde varias listas. Se detiene cuando la lista más corta se agota, así que es seguro incluso con longitudes distintas.

names  = ["Ana", "Carlos", "Lucía"]
scores = [82, 91, 65]

for name, score in zip(names, scores):
    print(f"{name}: {score} pts")
# Ana: 82 pts / Carlos: 91 pts / Lucía: 65 pts

Construye una lista numerada de precios a partir de nombres de productos y precios.

① Define items = ["apple", "bread", "milk"] y prices = [180, 320, 250].

② Combinando enumerate y zip, imprime números empezando en 1, nombres y precios con el formato 1. apple : 180.

Editor Python

Ejecutar el código para ver el resultado

Controlar bucles con break y continue

Es habitual querer detenerse porque has encontrado lo que necesitabas o saltarte solo esta iteración. Lo primero usa break para salir del bucle inmediatamente; lo segundo usa continue para saltar el resto de esta iteración y pasar al siguiente elemento.

break vs. continue
bucle forif condbreakfuera del buclebucle forif condcontinuesiguiente elementoTruesalirTruesaltar

break finaliza el propio bucle, así que los elementos restantes no se evalúan en absoluto. continue solo salta el resto de esta iteración y pasa al siguiente elemento — el bucle como tal continúa. Ambos se llaman típicamente desde dentro de un if.

# break: detenerse en cuanto encontremos el objetivo
users = ["ana", "carlos", "lucia", "diego"]
for name in users:
    if name == "lucia":
        print("Encontrada")
        break
    print(f"comprobando: {name}")
# comprobando: ana / comprobando: carlos / Encontrada

# continue: saltar los 0 al sumar
scores = [80, 0, 65, 0, 91]
total = 0
for score in scores:
    if score == 0:
        continue
    total += score
print(total)   # 80 + 65 + 91 = 236

Recorre una lista de stock, usando continue para saltar y usando break cuando detectes algo anómalo.

① Define stock = [12, 4, 0, 9, -1, 3].

② Usa enumerate para sacar números empezando en 1 y cantidades, y:

 - Para artículos con cantidad 0, salta sin imprimir (continue).

 - Para un artículo con cantidad negativa, imprime «Valor anómalo detectado en #X» y break.

 - En caso contrario, imprime «#X OK (Y unidades)».

Editor Python

Ejecutar el código para ver el resultado

En este artículo cubrimos el panorama general de for: iterar sobre listas y dicts, contar con range(), extender con enumerate() / zip() y controlar el flujo con break / continue.

En el siguiente artículo veremos el bucle while — usado para repetir cuando no conoces el conteo de antemano — y cómo evitar bucles infinitos.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué imprime este código?
for i in range(2, 6):
print(i)

Pregunta 2Cuando expandes enumerate(['a', 'b', 'c'], 1) con for, ¿qué pares se producen?

Pregunta 3¿Qué imprime este código?
nums = [1, 2, 3, 4, 5]
for n in nums:
if n == 3:
continue
print(n)