Los ciclos for
son una estructura de control repetitiva que permite ejecutar uno o varios bloques de código un número determinado de veces, teniendo un mayor control sobre las iteraciones. En Python, el ciclo for necesita un valor inicial y un valor final. Además, opcionalmente puede especificarse el tamaño del paso entre cada repetición.
En resumen, un ciclo for
es ideal cuando sabemos cuántas veces debe repetirse una acción, ya que permite definir un rango de valores por los que iterar. A continuación, veamos un ejemplo sencillo donde el programa imprime los números del 1 al 100:
for i in range(1, 101):
print(i)
En Python se puede iterar prácticamente todo, como cadenas, listas, tuplas y diccionarios. Por ejemplo:
for letra in "Python":
print(letra)
En este caso, la variable letra
toma el valor de cada carácter de la cadena. Más adelante explicaremos con mayor profundidad qué significa que algo sea “iterable” o un “iterador”.
Iterables e iteradores:
Para entender completamente cómo funciona un for
en Python, debemos comprender los conceptos de iterables e iteradores.
- Iterable: Es un objeto que puede ser recorrido elemento por elemento (como listas, tuplas, cadenas o diccionarios).
- Iterador: Es un objeto que permite recorrer un iterable, manteniendo una referencia al elemento actual y proporcionando el siguiente con la función
next()
.
Podemos saber si un objeto es iterable usando la función isinstance()
junto con el módulo collections.abc
:
from collections.abc import Iterable
print(isinstance("cadena", Iterable)) # True
print(isinstance(123, Iterable)) # False
También podemos obtener un iterador usando la función iter()
:
mi_lista = [10, 20, 30]
it = iter(mi_lista)
print(next(it)) # 10
print(next(it)) # 20
print(next(it)) # 30
Si se intenta avanzar más allá del final, se lanza un error StopIteration
.
Ejemplos de uso de for:
Iterar una cadena en orden inverso:
for letra in "Python"[::-1]:
print(letra)
Saltar elementos:
for letra in "Python"[::2]:
print(letra)
List Comprehension (compresión de listas):
cuadrados = [x**2 for x in range(10)]
print(cuadrados)
Uso de range():
Una forma muy común de usar for
es con range()
, que genera una secuencia de números. Puede recibir hasta tres parámetros:
range(inicio, fin, paso)
Ejemplos:
for i in range(5): # De 0 a 4
print(i)
for i in range(5, 20, 2): # De 5 a 19, de dos en dos
print(i)
for i in range(10, 0, -1): # Cuenta regresiva
print(i)
range()
no crea una lista, sino un objeto especial que se puede convertir explícitamente en lista si lo deseamos:
list(range(5)) # [0, 1, 2, 3, 4]
Control de flujo en bucles: break, continue y pass con for
Python proporciona instrucciones especiales para modificar el flujo de ejecución dentro de un bucle:
Instrucción break:
La instrucción break
interrumpe completamente la ejecución del ciclo, terminándolo en cuanto se cumple cierta condición
Ejemplo: salir del ciclo al llegar a un valor específico
for numero in range(10):
if numero == 5:
break
print(numero)
En este caso, el ciclo se detiene cuando numero es igual a 5, sin imprimirlo ni continuar con las siguientes iteraciones.
Instrucción continue:
La instrucción continue
omite el resto del código dentro del ciclo en la iteración actual y pasa directamente a la siguiente
Ejemplo: saltarse un valor específico
for numero in range(10):
if numero == 5:
continue
print(numero)
Aquí se omite el número 5, pero el ciclo continúa normalmente con los demás valores.
Instrucción pass:
La instrucción pass
se utiliza cuando se requiere una instrucción sintácticamente válida, pero que no haga nada. Puede servir como marcador de posición para código que será escrito más adelante, o cuando queremos que no ocurra ninguna acción ante una condición específica.
Ejemplo: no hacer nada si se cumple una condición
for numero in range(5):
if numero == 2:
pass
print(numero)
Aunque el número 2 cumple la condición del if, pass no afecta el ciclo y simplemente continúa.
¿Cuándo usar while y cuándo for?
- Usa
while
cuando no sabes cuántas veces se ejecutará el bucle. - Usa
for
cuando sí sabes cuántas veces debe ejecutarse.