Ir al contenido principal

Bucles for: iteración sobre secuencias

Introducción

Los bucles for son una de las estructuras de control más potentes y utilizadas en Python. A diferencia del bucle while que se ejecuta mientras una condición sea verdadera, el bucle for está diseñado específicamente para iterar sobre una secuencia de elementos de manera ordenada y predecible. Esta característica hace que sea especialmente útil para trabajar con listas, tuplas, cadenas y otras estructuras de datos secuenciales sin tener que preocuparnos por el control manual de índices o contadores.

En este artículo, veremos cómo funcionan los bucles for en Python, cómo utilizarlos para recorrer diferentes tipos de secuencias y algunas técnicas avanzadas que harán tu código más elegante y eficiente.

Estructura básica del bucle for

La sintaxis general de un bucle for en Python es:

for elemento in secuencia:
    # Bloque de código a ejecutar en cada iteración

Donde:

  • elemento es una variable que tomará el valor de cada elemento de la secuencia en cada iteración
  • secuencia es cualquier objeto iterable (como una lista, tupla, cadena, etc.)

El bucle se ejecutará una vez por cada elemento en la secuencia, asignando en cada iteración el valor del elemento actual a la variable elemento.

Iteración sobre diferentes tipos de secuencias

Iteración sobre listas

El caso más común es iterar sobre una lista:

frutas = ["manzana", "plátano", "naranja", "fresa"]

for fruta in frutas:
    print(f"Me gusta comer {fruta}")

Salida:

Me gusta comer manzana
Me gusta comer plátano
Me gusta comer naranja
Me gusta comer fresa

Iteración sobre cadenas

También podemos iterar sobre cada carácter de una cadena:

nombre = "Python"

for letra in nombre:
    print(letra)

Salida:

P
y
t
h
o
n

Iteración sobre tuplas

Las tuplas funcionan igual que las listas:

dimensiones = (10, 20, 30)

for medida in dimensiones:
    print(f"La medida es {medida} cm")

Salida:

La medida es 10 cm
La medida es 20 cm
La medida es 30 cm

Iteración sobre diccionarios

Al iterar sobre un diccionario, por defecto se iteran las claves:

usuario = {
    "nombre": "Laura",
    "edad": 28,
    "ciudad": "Madrid"
}

# Iterando sobre las claves
for clave in usuario:
    print(clave)

Salida:

nombre
edad
ciudad

Para iterar sobre los valores:

for valor in usuario.values():
    print(valor)

Salida:

Laura
28
Madrid

Para iterar sobre pares clave-valor:

for clave, valor in usuario.items():
    print(f"{clave}: {valor}")

Salida:

nombre: Laura
edad: 28
ciudad: Madrid

La función range()

La función range() es una herramienta muy útil que se utiliza a menudo con bucles for para generar secuencias de números. Existen tres formas principales de usar range():

range(stop)

Genera números desde 0 hasta stop-1:

for i in range(5):
    print(i)

Salida:

0
1
2
3
4

range(start, stop)

Genera números desde start hasta stop-1:

for i in range(2, 6):
    print(i)

Salida:

2
3
4
5

range(start, stop, step)

Genera números desde start hasta stop-1, con un incremento de step:

for i in range(0, 10, 2):
    print(i)

Salida:

0
2
4
6
8

También podemos usar step negativo para contar hacia atrás:

for i in range(10, 0, -2):
    print(i)

Salida:

10
8
6
4
2

Técnicas avanzadas

Enumerate: obtener índice y valor

La función enumerate() nos permite obtener tanto el índice como el valor en cada iteración:

colores = ["rojo", "verde", "azul"]

for indice, color in enumerate(colores):
    print(f"Índice {indice}: {color}")

Salida:

Índice 0: rojo
Índice 1: verde
Índice 2: azul

También podemos especificar el valor inicial del índice:

for indice, color in enumerate(colores, start=1):
    print(f"Color #{indice}: {color}")

Salida:

Color #1: rojo
Color #2: verde
Color #3: azul

Zip: iterar sobre múltiples secuencias

La función zip() permite iterar sobre dos o más secuencias simultáneamente:

nombres = ["Ana", "Carlos", "Elena"]
edades = [25, 30, 27]

for nombre, edad in zip(nombres, edades):
    print(f"{nombre} tiene {edad} años")

Salida:

Ana tiene 25 años
Carlos tiene 30 años
Elena tiene 27 años

Si las secuencias tienen diferente longitud, zip() se detendrá cuando se acabe la secuencia más corta.

Casos prácticos

Calcular la suma de una lista de números

numeros = [10, 20, 30, 40, 50]
suma = 0

for numero in numeros:
    suma += numero

print(f"La suma es: {suma}")  # Imprime: La suma es: 150

Encontrar el número más grande en una lista

numeros = [23, 45, 12, 67, 32, 89, 54]
maximo = numeros[0]  # Asumimos que el primer número es el máximo inicialmente

for numero in numeros:
    if numero > maximo:
        maximo = numero

print(f"El número más grande es: {maximo}")  # Imprime: El número más grande es: 89

Crear una tabla de multiplicar

numero = 7

for i in range(1, 11):
    resultado = numero * i
    print(f"{numero} x {i} = {resultado}")

Salida:

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70

Resumen

Los bucles for son una herramienta fundamental en Python para recorrer secuencias de datos. Su sintaxis clara y sencilla hace que trabajar con listas, tuplas, cadenas y otras estructuras de datos sea más intuitivo y menos propenso a errores que usar bucles while con contadores manuales. Además, herramientas como range(), enumerate() y zip() expanden las posibilidades de los bucles for, permitiéndonos escribir código más conciso y elegante.

En el próximo artículo, exploraremos cómo controlar el flujo de los bucles usando las instrucciones break, continue y la cláusula else, lo que nos dará un mayor control sobre nuestros bucles.