Menu

Bucles for en Python: iterar listas, strings, ranges y diccionarios

Cómo funciona el bucle for de Python — iterar sobre listas, strings, ranges, diccionarios y cualquier otra cosa iterable, más break, continue y else.

El bucle for de Python es "para cada"

Si has usado un lenguaje con estilo C, el bucle for de Python te parecerá distinto. No hay patrón for (i = 0; i < n; i++) con contador. El for de Python es estrictamente un bucle para cada: le das una colección y te devuelve los elementos uno a uno.

main.py
Output
Click Run to see the output here.

Eso imprime tres líneas. Python lee la lista, saca cada elemento por turno y lo ata a color mientras el cuerpo se ejecuta. Cuando no queda nada, el bucle termina.

Fíjate en la forma — for <nombre> in <iterable>: seguido de un cuerpo indentado. Indentación, dos puntos, cuerpo; la misma estructura que if.

Qué cuenta como iterable

Prácticamente cualquier cosa que contenga una secuencia de valores. Listas, tuplas, strings, ranges, dicts, sets, archivos y la mayoría de objetos custom que construirás.

main.py
Output
Click Run to see the output here.

La uniformidad es lo bonito — una sintaxis, muchas formas de datos.

Contar con range()

Cuando sí quieres un contador — "haz esto diez veces" o "recorre los índices 0 a 9" — usa range():

main.py
Output
Click Run to see the output here.

Eso imprime 0, 1, 2, 3, 4. range(stop) cuenta desde 0 hasta pero sin incluir stop. range(start, stop) te deja fijar un valor inicial, y range(start, stop, step) te deja controlar el tamaño del paso:

main.py
Output
Click Run to see the output here.

Hay una página dedicada a range viniendo porque vale la pena entenderlo un poco más a fondo. Por ahora, range(n) te da n iteraciones numeradas de 0 a n-1.

enumerate en Python: iterar con un índice

Una necesidad común: "quiero el índice y el valor juntos". El instinto del principiante es usar range(len(...)), pero Python tiene una herramienta más agradable:

main.py
Output
Click Run to see the output here.

enumerate() produce pares (index, value). La doble variable después de for desempaqueta el par en dos nombres — index y color. Mucho más limpio que:

main.py
Output
Click Run to see the output here.

Si quieres empezar a contar en 1 en vez de 0, pasa start=1:

main.py
Output
Click Run to see the output here.

zip en Python: iterar sobre dos secuencias juntas

Cuando tienes dos listas del mismo tamaño y quieres emparejarlas:

main.py
Output
Click Run to see the output here.

zip se detiene en la secuencia más corta. Si quieres que siga y rellene con None, usa itertools.zip_longest.

Iterar un dict

Los diccionarios te dan opciones sobre qué recorrer:

main.py
Output
Click Run to see the output here.

La mayor parte del tiempo quieres .items() — obtienes la clave y el valor juntos en una línea legible.

break y continue

A veces quieres salirte antes o saltarte una iteración.

break sale del bucle inmediatamente:

main.py
Output
Click Run to see the output here.

En cuanto se encuentra un número mayor que 6, el bucle se detiene. Los elementos restantes se ignoran.

continue salta el resto de la iteración actual y pasa a la siguiente:

main.py
Output
Click Run to see the output here.

Ambos son correctos, aunque continue puede hacer los bucles más difíciles de seguir si tienes más de uno. A menudo un simple if/else se lee mejor.

La cláusula else en un bucle

Python tiene una feature que la mayoría de lenguajes no tienen: una cláusula else en los bucles. Se ejecuta cuando el bucle termina sin haber golpeado un break.

main.py
Output
Click Run to see the output here.

Útil, pero inicialmente confusa. No te sientas obligado a usarla — una bandera booleana fuera del bucle suele ser más clara para lectores nuevos.

Mutar una lista mientras iteras

Una trampa que vale la pena señalar: no añadas ni quites elementos de una lista mientras estás iterándola. La iteración se confunde sobre qué índices siguen siendo válidos, y te pierdes elementos o disparas un error. El patrón seguro es construir una lista nueva:

main.py
Output
Click Run to see the output here.

O, cuando estés cómodo, una list comprehension hace lo mismo en una línea — lo cubriremos en el capítulo de colecciones.

Un pequeño ejemplo de principio a fin

Juntamos unos cuantos de estos — leer una lista, filtrar, enumerar, imprimir:

main.py
Output
Click Run to see the output here.

Siguiente: bucles while

for es la elección correcta cuando sabes sobre qué estás iterando. while es la elección correcta cuando estás en bucle hasta que cambie una condición — eso viene ahora.

Preguntas frecuentes

¿Cómo funciona un bucle for en Python?

for item in sequence: ejecuta el cuerpo indentado una vez por cada elemento en la secuencia, asumiendo item cada valor por turno. Las secuencias incluyen listas, tuplas, strings, dicts, ranges y cualquier objeto que defina un iterador.

¿Cuál es la diferencia entre break y continue?

break sale del bucle inmediatamente, saltándose cualquier iteración restante. continue salta el resto de la iteración actual y pasa a la siguiente. break es para "he terminado"; continue es para "saltarse esta".

¿Cómo itero con un índice en Python?

Envuelve la secuencia en enumerate(...) para obtener pares (index, value): for i, item in enumerate(items):. Mucho más limpio que mantener tu propio contador con i += 1 al final del bucle.

Aprende a programar con Coddy

COMENZAR