Bucles For en Python
Aprende cómo funcionan los bucles for en Python: sintaxis, range(), enumerate(), break, continue, else, bucles anidados e iteración sobre listas, strings y diccionarios.
Un bucle for en Python itera sobre cada elemento de una secuencia — una lista, tupla, string, diccionario, conjunto o cualquier otro iterable — y ejecuta un bloque de código una vez por elemento. A diferencia de otros lenguajes donde for normalmente cuenta números, el for de Python es un bucle for-each que recorre los elementos directamente.
Este capítulo cubre:
- Sintaxis básica y cómo funciona la variable del bucle
- La función
range()para bucles con conteo break,continuey la cláusulaelseenumerate()yzip()para iteraciones más ricas- Iteración sobre strings, diccionarios y estructuras anidadas
- Bucles
foranidados - La sentencia
passcomo marcador de posición
Sintaxis básica
for variable in iterable:
# block executed once per itemvariable recibe cada elemento sucesivo del iterable. El bloque con sangría se ejecuta una vez por cada elemento.
Iteración sobre una lista
Salida:
apple
banana
cherryEl bucle asigna "apple" a fruit, ejecuta print(fruit), luego pasa a "banana", y así sucesivamente hasta agotar todos los elementos.
Iteración sobre un string
Un string es en sí mismo un iterable — cada carácter es un elemento:
for ch in "Python":
print(ch)Salida:
P
y
t
h
o
nLa función range()
range() genera una secuencia de enteros bajo demanda. Es la forma más común de ejecutar un bucle un número específico de veces.
range(stop)
range(start, stop)
range(start, stop, step)| Parámetro | Valor por defecto | Significado |
|---|---|---|
start | 0 | Primer valor (inclusive) |
stop | requerido | Límite superior (exclusivo) |
step | 1 | Incremento entre valores |
Contar del 1 al 5
Salida:
1
2
3
4
5range(1, 6) produce 1, 2, 3, 4, 5 — el valor de parada 6 no está incluido.
Contar en pasos
for i in range(0, 10, 2):
print(i)Salida:
0
2
4
6
8Contar hacia atrás
Un paso negativo itera en orden inverso:
for i in range(10, 0, -2):
print(i)Salida:
10
8
6
4
2La sentencia break
break sale del bucle de inmediato, antes de que se hayan visitado todos los elementos.
for i in range(1, 6):
if i == 3:
break
print(i)Salida:
1
2Cuando i es igual a 3, se ejecuta break y el bucle se detiene — 3, 4 y 5 nunca se imprimen.
Cuándo usar break: al buscar en una lista y querer detener la búsqueda en cuanto se encuentra una coincidencia; para salir anticipadamente de un cálculo largo.
La sentencia continue
continue omite el resto de la iteración actual y pasa directamente al siguiente elemento.
for i in range(1, 6):
if i == 3:
continue
print(i)Salida:
1
2
4
5Cuando i es igual a 3, continue omite print(i) y salta a i = 4.
La cláusula else
El bucle for de Python admite un bloque else opcional que se ejecuta solo si el bucle se completó normalmente (es decir, no fue terminado por break).
for i in range(1, 4):
print(i)
else:
print("Loop finished")Salida:
1
2
3
Loop finishedSi el bucle sale mediante break, el bloque else se omite:
for i in range(1, 6):
if i == 3:
break
print(i)
else:
print("Loop finished without break")Salida:
1
2La cláusula else es útil para indicar si una búsqueda tuvo éxito — si se ejecuta break al encontrar una coincidencia, el bloque else solo se ejecuta cuando no se encontró ninguna.
enumerate() — bucle con índice y valor
enumerate() empareja cada elemento con su índice de posición, de modo que obtienes ambos en un mismo bucle sin necesidad de una variable contador separada.
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
print(index, color)Salida:
0 red
1 green
2 bluePara comenzar a contar desde un número diferente, se pasa start:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)Salida:
1 apple
2 banana
3 cherryzip() — iterar sobre dos secuencias a la vez
zip() empareja elementos de dos (o más) iterables uno a uno:
names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(name, score)Salida:
Alice 95
Bob 87
Charlie 92zip() se detiene cuando se agota el iterable más corto.
Iteración sobre diccionarios
Iterar sobre un diccionario por defecto devuelve sus claves:
person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
print(key, ":", person[key])Salida:
name : Alice
age : 30
city : ParisUsa .items() para obtener pares clave-valor juntos:
for key, value in person.items():
print(key, ":", value)Salida:
name : Alice
age : 30
city : ParisConsulta también el capítulo Loop Dictionaries para más patrones.
Bucles for anidados
Un bucle for puede colocarse dentro de otro bucle for. El bucle interior se ejecuta completamente en cada iteración del bucle exterior.
Salida:
red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherryAtención: break dentro de un bucle anidado solo sale del bucle interior, no de ambos. Para salir de ambos bucles a la vez necesitas una variable bandera o refactorizar en una función y usar return.
La sentencia pass
pass es un marcador de posición sin operación. Úsalo cuando un bucle for es sintácticamente necesario pero aún no tienes nada que poner en el cuerpo:
for i in range(3):
pass # TODO: implement laterSin pass, Python lanzaría un IndentationError porque un bloque vacío es sintaxis inválida.
Bucles for vs comprensiones de lista
Un patrón común es construir una nueva lista dentro de un bucle for:
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares)Salida: [1, 4, 9, 16, 25]
Python ofrece una alternativa más concisa llamada comprensión de lista:
squares = [x ** 2 for x in range(1, 6)]
print(squares)Salida: [1, 4, 9, 16, 25]
Las comprensiones de lista son idiomáticas para transformaciones simples; usa un bucle for normal cuando el cuerpo es complejo o tiene efectos secundarios.
Elegir entre for y while
| Situación | Preferir |
|---|---|
| Conoces el número de iteraciones o tienes un iterable | for |
| Iteras hasta que cambia una condición | while |
| Necesitas índice y valor | for + enumerate() |
| Iteras sobre dos listas a la vez | for + zip() |