Bucles for en Python: recorre cualquier cosa con ejemplos
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Imagina que eres profesor y tienes 30 estudiantes. Tienes que imprimir el boletín de calificaciones de cada uno. ¿Escribirías 30 instrucciones print por separado? Claro que no. Le dirías a la computadora: "para cada estudiante, imprime su boletín". Eso es exactamente lo que hace un bucle for.
En esta lección aprenderás a usar el bucle for de Python para repetir acciones sobre listas, cadenas de texto, rangos de números y diccionarios. También descubrirás herramientas muy útiles como enumerate() y zip(), que hacen los bucles todavía más sencillos.
Al terminar, podrás procesar colecciones de datos de forma eficiente en lugar de escribir código repetitivo. Es una de las habilidades más importantes de la programación.
¿Cómo funciona un bucle for en Python?
Un bucle for toma una colección de elementos y ejecuta el mismo código una vez por cada elemento. En cada vuelta del bucle, una variable guarda el elemento actual. A cada vuelta se le llama iteración.
Piénsalo como repartir cartas. Tomas la baraja y, por cada carta, la colocas boca arriba sobre la mesa. La carta cambia cada vez, pero la acción es siempre la misma.
apple banana cherry
Esta es la estructura: la palabra clave for, un nombre de variable (fruit), la palabra clave in y la colección (fruits), seguidos de dos puntos. El código indentado que va debajo se ejecuta una vez por cada elemento de la lista.
En la primera iteración, fruit vale "apple". En la segunda, vale "banana". En la tercera, "cherry". Después del último elemento, el bucle termina y Python continúa con lo que venga después.
Added 10, total is now 10 Added 20, total is now 30 Added 30, total is now 60 Added 40, total is now 100 Final total: 100
Este patrón, en el que empiezas con un valor y lo actualizas en cada iteración, se llama acumulación. Lo usarás constantemente: para sumar números, construir cadenas, reunir resultados y mucho más.
¿Qué hace range() en Python?
A veces no tienes una lista que recorrer: quieres repetir algo un número concreto de veces, o recorrer una secuencia de números. Para eso sirve range().
range() genera una secuencia de números. No crea una lista en memoria: produce los números uno a uno, a medida que el bucle los necesita. Por eso es eficiente incluso con rangos muy grandes.
0 1 2 3 4
Fíjate en que range(5) empieza en 0 y se detiene antes del 5. Te da exactamente 5 números: del 0 al 4. Este patrón de "empezar en cero y parar antes del final" se repite en todo Python.
1 2 3 4 5
Con dos argumentos, el primero indica dónde empezar y el segundo dónde parar (sin incluirlo). Así, range(1, 6) te da 1, 2, 3, 4, 5.
Count by 2s: 0 2 4 6 8 10 Countdown: 5 4 3 2 1 Blastoff!
El tercer argumento es el paso (step): cuánto se suma cada vez. Un paso de 2 se salta un número de cada dos. Un paso negativo cuenta hacia atrás. Puedes usar como paso cualquier número entero, positivo o negativo.
¿Cómo se recorren las cadenas y los diccionarios?
Los bucles for funcionan con cualquier cosa iterable en Python, no solo con listas y rangos. Las cadenas y los diccionarios son dos de los iterables que más vas a recorrer.
Recorrer una cadena
Cuando recorres una cadena, obtienes un carácter cada vez. Es útil para contar letras, revisar la ortografía o procesar texto carácter a carácter.
P y t h o n
Cada iteración te da el siguiente carácter. El end=" " de la función print cambia el salto de línea predeterminado por un espacio, así que todos los caracteres se imprimen en una sola línea.
"programming" has 3 vowels
Este ejemplo combina un bucle for con una instrucción if. Para cada carácter, comprobamos si es una vocal. Si lo es, aumentamos el contador. Es el tipo de patrón que escribirás todo el tiempo.
Recorrer un diccionario
Cuando recorres un diccionario, por defecto obtienes las claves. Para obtener las claves y los valores a la vez, usa el método .items().
Students: Alice Bob Charlie Report card: Alice: 92 Bob: 85 Charlie: 78
El método .items() devuelve cada entrada como un par (clave, valor). Al escribir for name, score in scores.items(), desempaquetas cada par en dos variables separadas. Es más limpio que acceder a scores[name] dentro del bucle.
¿Qué hace enumerate() en Python?
A veces necesitas el elemento Y TAMBIÉN su posición en la lista. Podrías usar range(len(list)) e indexar la lista a mano, pero Python tiene una forma más limpia: enumerate().
colors = ["red", "green", "blue"]
for i in range(len(colors)):
print(f"{i}: {colors[i]}")colors = ["red", "green", "blue"]
for i, color in enumerate(colors):
print(f"{i}: {color}")enumerate() envuelve un iterable y te da pares (índice, elemento). Desempaquetas cada par en dos variables. Los dos ejemplos producen la misma salida, pero la versión con enumerate() es más legible y más pythónica.
Today's to-do list: 1. Buy groceries 2. Clean house 3. Walk dog 4. Cook dinner
El argumento start=1 le indica a enumerate() que empiece a contar desde 1 en lugar de 0. Es perfecto para crear listas numeradas, donde un "elemento 0" no tendría sentido para quien las lee.
¿Cómo recorrer varias listas a la vez con zip()?
¿Y si tienes dos listas relacionadas y quieres procesarlas juntas? Por ejemplo, una lista con nombres de estudiantes y otra con sus calificaciones. zip() las empareja para que puedas recorrer las dos a la vez.
Alice: 92 (Pass) Bob: 85 (Pass) Charlie: 78 (Needs improvement)
zip() toma dos o más iterables y los combina elemento a elemento. En la primera iteración, obtienes el primer elemento de cada lista. En la segunda, el segundo de cada una, y así sucesivamente.
Alice Smith, age 25 Bob Jones, age 30 Charlie Brown, age 22
¿Qué son los bucles for anidados?
Puedes poner un bucle for dentro de otro bucle for. El bucle interior se ejecuta completo en cada iteración del bucle exterior. Esto se llama anidamiento, y es la forma de trabajar con cuadrículas, tablas y combinaciones.
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
Cuando row vale 1, el bucle interior se ejecuta con col tomando los valores 1, 2, 3. Luego row pasa a valer 2, y el bucle interior vuelve a ejecutarse con col tomando 1, 2, 3. El bucle interior empieza de cero cada vez que el exterior avanza.
Ejercicios de práctica
¡Es hora de poner en práctica lo que sabes de bucles for! Estos ejercicios van desde la iteración básica hasta combinar bucles con las herramientas que acabas de aprender.
Intenta resolver cada ejercicio por tu cuenta antes de mirar las pistas. Atascarte y encontrar la salida tú mismo es como se aprende de verdad.
Tienes una lista de productos del supermercado. Usa un bucle for para imprimir cada producto en su propia línea.
Salida esperada:
milk
eggs
bread
butterUsa range() y un bucle for para calcular la suma de todos los números del 1 al 10 (ambos incluidos). Imprime el resultado.
Salida esperada:
Sum: 55Sin ejecutar el código, predice exactamente lo que va a imprimir. Fíjate bien en los argumentos de range() y en la condición del if.
Después, ejecútalo para comprobar tu respuesta.
Este código debería contar cuántas veces aparece la letra "l" en "hello world", pero tiene errores. Corrígelo para que imprima:
The letter "l" appears 3 timesNo cambies la variable word ni la instrucción print final: corrige solo la lógica del bucle.
Usa enumerate() con start=1 para imprimir el menú numerado de un restaurante.
Salida esperada:
1. Burger - $8.99
2. Pizza - $12.50
3. Salad - $7.25
4. Pasta - $10.00Usa un bucle for para invertir la cadena "Python" construyendo una cadena nueva carácter a carácter. NO uses el rebanado o slicing ([::-1]) ni la función reversed().
Salida esperada:
nohtyPRecorre el diccionario grades e imprime el nombre de cada estudiante y su calificación en letra. Una nota de 90 o más es "A", de 80 o más es "B", de 70 o más es "C", y por debajo de 70 es "F".
Salida esperada:
Alice: 95 (A)
Bob: 82 (B)
Charlie: 67 (F)
Diana: 73 (C)Resumen: bucles for en Python
Aquí tienes todo lo que aprendiste sobre los bucles for:
| Patrón | Qué hace | Ejemplo |
|---|---|---|
for x in list | Recorre cada elemento | for fruit in fruits: |
for i in range(n) | Repite n veces (de 0 a n-1) | for i in range(5): |
range(start, stop, step) | Secuencia de números a medida | range(1, 11, 2) |
for char in string | Recorre los caracteres | for c in "hello": |
for k, v in dict.items() | Recorre pares clave-valor | for name, score in grades.items(): |
enumerate(iterable) | Da el índice y el elemento | for i, x in enumerate(list): |
zip(a, b) | Empareja elementos de dos listas | for x, y in zip(names, scores): |
Reglas clave para recordar:
for termina con dos puntos (:)range() se detiene ANTES del número finalenumerate() es mejor que range(len(...))zip() se detiene en la lista más cortafor student in students)¿Qué sigue?
Los bucles for son ideales cuando sabes exactamente qué vas a recorrer. Pero ¿y si quieres seguir repitiendo hasta que cambie alguna condición? Para eso están los bucles while. En la siguiente lección, [Bucles while en Python](/python/python-while-loops), aprenderás a repetir según una condición en lugar de recorrer una colección.