Python a través de ejemplos: Ciclos o bucles for

Publicado el lunes, 24 de febrero del 2025

En Python, un ciclo o bucle for es una sentencia compuesta que puedes emplear para recorrer colecciones o contenedores de datos como listas, tuplas, cadenas, diccionarios y conjuntos.

Los ciclos for son fundamentales para procesar colecciones de datos, aplicando transformaciones sobre cada valor de la colección o empleando los valores en alguna operación o cálculo intermedio.

En este tutorial, aprenderás lo esencial sobre el funcionamiento de los ciclos for y cómo utilizarlos en tus programas.

Conociendo los ciclos for

Un ciclo o bucle for te permite iterar sobre los elementos de un iterable, colección o contenedor de datos, como pueden ser las listas, tuplas, cadenas de texto y diccionarios. En cada iteración, puedes ejecutar un bloque de código que actúe sobre cada elemento de la colección.

La sintaxis básica de un ciclo for en Python es la siguiente:

for variable in iterable:
    <block>
  • variable: variable del ciclo que mantiene una referencia al elemento actual de la secuencia.
  • iterable: objeto iterable sobre el que se realiza la iteración.
  • <block>: bloque de código con las instrucciones que se ejecutan en cada iteración.

Iterando con ciclos for en Python

En tu trabajo diario con Python, puedes emplear los ciclos for para recorrer los elementos de distintos tipos de datos, siempre y cuando estos soporten la iteración. Esto te permite transformar tus datos y hacer cálculos y operaciones con ellos mientras iteras.

En las secciones siguientes, aprenderás cómo emplear ciclos for para recorrer distintos tipos de datos integrados, como las listas, tuplas, cadenas, diccionarios y conjuntos.

Listas y tuplas

Los ciclos for son comúnmente empleados para iterar sobre listas:

>>> fruits = ["manzana", "banana", "cereza"]
>>> for fruit in fruits:
...     print(fruit)
...
manzana
banana
cereza

En este ejemplo, el ciclo recorre la lista de frutas e imprime cada elemento. La variable fruit es la variable del ciclo, y la lista fruits es el objeto iterable. La llamada a print() representa el bloque de código del bucle. Este bloque generalmente opera sobre o con los elementos del iterable.

También puedes emplear un ciclo for para poblar una lista vacía con valores generados a partir de alguna operación o cálculo:

>>> squares = []
>>> for value in [1, 2, 3]:
...     squares.append(value**2)
...
>>> squares
[1, 4, 9]

En este ejemplo, creas una lista vacía para almacenar los cuadrados de los valores almacenados en una lista de números. El método .append() te permite agregar valores individuales al final de una lista.

El ciclo for funciona de igual manera con tuplas:

>>> person = ("Juan", 35, "Programador", "Cuba")
>>> for value in person:
...     print(value)
...
Juan
35
Programador
Cuba

En este ejemplo, iteras sobre una tupla con un ciclo for. Nuevamente, el ciclo solo imprime cada elemento de la tupla en tu pantalla.

Cadenas de texto

También puedes usar un bucle for para recorrer los caracteres de una cadena de texto:

>>> word = "Python!"
>>> for char in word:
...     print(char)
...
P
y
t
h
o
n
!

Cada iteración de este bucle imprime un carácter de la cadena original.

Rangos de valores

La función incorporada range() genera secuencias de números enteros:

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

Aquí, range(5) genera los números del 0 al 4.

Diccionarios y conjuntos

Los ciclos for también te permiten iterar sobre diccionarios y conjuntos. En el caso de los diccionarios, puedes recorrer un diccionario por sus claves, valores, o items.

Para recorrer un diccionario por sus claves, puedes emplear el diccionario directamente o el método .keys() como se muestra a continuación:

>>> person = {"nombre": "Juan", "edad": 35, "puesto": "Programador"}

>>> for key in person:
...     print(key, "->", person[key])
...
nombre -> Juan
edad -> 35
puesto -> Programador

>>> for key in person.keys():
...     print(key, "->", person[key])
...
nombre -> Juan
edad -> 35
puesto -> Programador

Ambas maneras de iterar sobre las claves son equivalentes. La primera es más comúnmente usada y ligeramente más eficiente. Sin embargo, la segunda puede ser más explícita en algunas situaciones.

Para iterar sobre los valores, puedes emplear el método .values() como se muestra en el siguiente ejemplo:

>>> for value in person.values():
...     print(value)
...
Juan
35
Programador

Si deseas recorrer los pares clave-valor, puedes usar .items() como se muestra en el siguiente ejemplo:

>>> for key, value in person.items():
...     print(key, "->", value)
...
nombre -> Juan
edad -> 35
puesto -> Programador

Finalmente, los ciclos for también te permiten recorrer conjuntos:

>>> colors = {"rojo", "azul", "verde", "amarillo"}
>>> for color in colors:
...     print(color)
...
amarillo
azul
verde
rojo

Es fundamental que tengas en cuenta que los conjuntos en Python son colecciones no ordenadas de datos. Por esta razón, el ciclo itera sobre los elementos en un orden diferente al orden de inserción.

Controlando la iteración con break y continue

En Python, las sentencias break y continue te permiten controlar el flujo de ejecución en los ciclos for. La función de estas sentencias es la siguiente:

  • break: termina el ciclo anticipadamente y salta a la sentencia inmediatamente después del ciclo.
  • continue: salta a la siguiente iteración, sin ejecutar el código que le sigue en el bloque del ciclo.

A continuación, un ejemplo de cómo usar break:

>>> for letter in "python":
...     if letter == "h":
...         break
...     print(letter)
...
p
y
t

Nota cómo la ejecución termina cuando la letra actual es "h". El resto de las letras no se imprimen.

Considera el siguiente ejemplo de cómo emplear continue:

>>> for letter in "python":
...     if letter == "h":
...         continue
...     print(letter)
...
p
y
t
o
n

En este ejemplo, la letra "h" no se imprime, pues la sentencia continue salta a la próxima iteración sin ejecutar print().

Usando la cláusula else en ciclos for

Como las sentencias condicionales, los ciclos for pueden tener una cláusula else. En los ciclos, el else se ejecuta únicamente cuando el ciclo finaliza sin ser interrumpido por una sentencia break:

>>> for i in range(4):
...     print(i)
... else:
...     print("Ciclo finalizado")
...
0
1
2
3
Ciclo finalizado

Este ciclo termina naturalmente luego de recorrer el rango de valores completo. Entonces, el else se ejecuta y ves el mensaje Ciclo finalizado en la pantalla.

Si se usa una instrucción break, el bloque else no se ejecuta:

>>> for i in range(4):
...     if i == 2:
...         break
...     print(i)
... else:
...     print("Ciclo finalizado")
...
0
1

Este ciclo termina cuando el valor de i es igual a 2, en cuyo caso la cláusula else no se ejecuta.

Es importante tener en cuenta que, cuando incluyes un bucle for en una función y el bucle contiene una instrucción return, entonces este termina al alcanzar dicha instrucción y la cláusula else no se ejecuta.

Usando ciclos for anidados

Puedes anidar un ciclo for dentro de otro para recorrer estructuras más complejas, como por ejemplo listas de listas:

>>> matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]

>>> for row in matrix:
...     for value in row:
...         print(value)
...
1
2
3
4
5
6
7
8
9

Puedes anidar ciclos a tanto niveles como necesites. Sin embargo, esta práctica suele causar que tu código sea ineficiente y difícil de entender. Por lo tanto, es recomendable no anidar ciclos a más de dos niveles de profundidad.

Conclusiones

Los ciclos o bucles for son esenciales en Python para realizar tareas repetitivas y manipular datos eficientemente. Con un ciclo for, puedes recorrer diversos tipos de datos como listas, cadenas y diccionarios.

También puedes combinar for con range(), break, continue y else para controlar el flujo de ejecución de tu código en una manera mucho más precisa.

Dominar esta estructura es fundamental para escribir código más limpio y efectivo. Practica con tus propios ejemplos y experimenta con diferentes estructuras para afianzar tu comprensión.