QuieroProgramar por Rodri Gonzalez
Python · Lección 17 de 27

For (bucle de iteración)

El bucle for es la estructura de repetición más usada en Python. Recorre cualquier colección — listas, strings, diccionarios, rangos — ejecutando un bloque para cada elemento. Es tu herramienta principal para procesar datos.

90–110 min Prerrequisitos: 08 Listas, 10 Diccionarios, 16 While
01

Concepto teórico

¿Qué es el bucle for?

El for de Python es diferente al de otros lenguajes. No es un for clásico de C (for(i=0; i). Es un for-each: recorre cada elemento de un iterable (cualquier objeto que se pueda recorrer) y ejecuta el bloque una vez por cada elemento.

for elemento in iterable:
    # se ejecuta una vez por cada elemento
    hacer_algo(elemento)

¿Qué es un iterable? Cualquier cosa que Python pueda recorrer: listas, tuplas, strings, diccionarios, sets, ranges, archivos, generadores. Básicamente, si podés poner algo después de in, es un iterable.

Diferencia clave con while: en un while, vos controlás la condición de salida (y podés generar loops infinitos). En un for, Python sabe exactamente cuántos elementos tiene el iterable y para solo cuando los recorrió todos. No hay riesgo de loop infinito con for (excepto con generadores infinitos, algo avanzado).

range() — generar secuencias numéricas

Cuando necesitás repetir algo N veces o generar una secuencia de números, usás range():

Sintaxis Genera Ejemplo
range(n) 0, 1, 2, ..., n-1 range(5) → 0,1,2,3,4
range(a, b) a, a+1, ..., b-1 range(3, 8) → 3,4,5,6,7
range(a, b, paso) a, a+paso, ... range(0, 20, 5) → 0,5,10,15
range(b, a, -1) b, b-1, ..., a+1 range(5, 0, -1) → 5,4,3,2,1
Error común: range(1, 5) genera 1, 2, 3, 4 — NO incluye el 5. El límite superior siempre está excluido, igual que en slicing. Si querés 1 a 5 inclusive, usá range(1, 6).

For sobre distintos iterables

  • Lista: for item in lista: — recorre cada elemento
  • String: for char in "hola": — recorre cada carácter (h, o, l, a)
  • Diccionario: for k in dict: recorre claves. for k, v in dict.items(): recorre pares.
  • Set: for elem in mi_set: — recorre elementos (orden impredecible)
  • Tupla: for elem in tupla: — igual que lista
  • Range: for i in range(10): — números del 0 al 9

Patrones esenciales: enumerate, zip, unpacking

Ya los viste en lecciones anteriores, pero acá los consolidamos como los tres compañeros inseparables del for:

  • enumerate(iterable, start=0) — te da (índice, elemento) en cada iteración. NUNCA uses for i in range(len(lista)): cuando podés usar enumerate.
  • zip(iter1, iter2, ...) — recorre múltiples iterables en paralelo. Para cuando los datos están repartidos en listas separadas.
  • Unpacking en for: for nombre, score in lista_de_tuplas: — desempaquetá directamente en el for.

break, continue y for/else

break y continue funcionan igual que en while. Pero for tiene un extra exclusivo: else.

for/else: el bloque else se ejecuta solo si el for terminó sin break. Si hubo break, else NO se ejecuta. Es útil para búsquedas: "si encontré algo, break; si no encontré nada, el else se activa".

for cliente in clientes:
    if cliente["score"] > 800:
        print(f"Premium encontrado: {cliente['nombre']}")
        break
else:
    print("Ningún cliente premium")
Tip sobre for/else: leelo como "for ... si no hubo break, else ...". Es un patrón poco conocido pero muy elegante para búsquedas. En la práctica, la mayoría de la gente usa una variable flag (encontrado = False/True) en su lugar, pero for/else es más pythónico.
En análisis de datos: el for es la base de TODA iteración sobre datos. Cada df.apply(), cada df.iterrows(), cada comprehension, cada map() y cada filter() son internamente un for. Dominar el for básico te da la base para entender las abstracciones de pandas.
02

Ejemplos explicados paso a paso

Ejemplo 1: For sobre distintos iterables

ejemplo_01_iterables.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: range() en profundidad

ejemplo_02_range.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: enumerate y zip — los mejores amigos del for

ejemplo_03_enum_zip.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: break, continue y for/else

ejemplo_04_break_continue.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: For anidados — procesar tablas y matrices

ejemplo_05_anidados.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Patrón Sintaxis Uso
For básico for x in lista: Recorrer cualquier iterable
Con range for i in range(n): Repetir N veces
Con enumerate for i, x in enumerate(lst): Índice + valor
Con zip for a, b in zip(l1, l2): Recorrer en paralelo
Sobre dict for k, v in d.items(): Clave + valor
Con unpacking for a, b in lista_tuplas: Desempaquetar en el for
For anidado for x in ext: for y in int: Tablas, matrices, estructuras profundas
For/else for x in l: ... else: Verificar si no hubo break
Anti-patrón ❌ Patrón pythónico ✅
for i in range(len(lst)): lst[i] for elem in lst:
i=0; for x in lst: i+=1 for i, x in enumerate(lst):
for i in range(len(a)): a[i], b[i] for x, y in zip(a, b):
for k in dict: dict[k] for k, v in dict.items():
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Recorrer lista de nombres

Dada nombres = ["García","López","Martínez","Pérez"], imprimí cada nombre con un saludo. Debe incluir Martínez.

ejercicio_01.pyDebe incluir "Martínez"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: Sumar con for

Dada ventas = [45000, 72000, 38000, 91000, 55000], sumá todas usando un acumulador con for (sin usar sum()). Debe incluir 301000.

ejercicio_02.pyDebe incluir "301000"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: range para generar secuencia

Imprimí los múltiplos de 5 del 5 al 50 usando range(5, 51, 5). Debe incluir 50.

ejercicio_03.pyDebe incluir "50"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: enumerate para ranking

Ordená scores = [720,680,810,590,750] de mayor a menor e imprimilos con posición (1ro, 2do, etc.) usando enumerate. Debe incluir 1. 810.

ejercicio_04.pyDebe incluir "1. 810"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: zip para tabla combinada

Combiná tickers=["GGAL","YPF","PAMP"] y precios=[5200,28000,3100] con zip. Imprimí una tabla y el precio total. Debe incluir 36300.

ejercicio_05.pyDebe incluir "36300"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: for sobre diccionario

Dado saldos = {"García": 150000, "López": 320000, "Pérez": 890000}, recorrelo con .items() e imprimí cada cliente con formato de moneda. Debe incluir 890,000.

ejercicio_06.pyDebe incluir "890,000"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: for con continue para limpiar datos

Dada datos = ["$1,500", "N/A", "$3,200", "", "$800", "error"], recorrela, saltá los inválidos con continue, convertí los válidos a float y sumá. Debe incluir 5500.

ejercicio_07.pyDebe incluir "5500"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: for/else para búsqueda

Buscá en una lista de clientes si alguno tiene score > 900. Si lo encontrás, imprimí su nombre con break. Si no, imprimí Ninguno encontrado usando for/else. Debe incluir Ninguno encontrado.

ejercicio_08.pyDebe incluir "Ninguno encontrado"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: For anidado — reporte por sucursal

Dada una lista de sucursales (cada una con lista de clientes), imprimí un reporte agrupado y el total general. Debe incluir TOTAL.

ejercicio_09.pyDebe incluir "TOTAL"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Pipeline completo de procesamiento

Tenés registros crudos. Para cada uno: (1) split por |, (2) convertir tipos, (3) clasificar score en Alto/Medio/Bajo, (4) acumular estadísticas. Imprimí tabla formateada + resumen. Debe incluir RESUMEN.

ejercicio_10_desafio.pyDebe incluir "RESUMEN"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

  • for x in iterable: recorre cada elemento de cualquier iterable (lista, dict, string, range, set).
  • range(start, stop, step) genera secuencias numéricas. El stop está excluido.
  • enumerate() da índice + valor. zip() combina iterables en paralelo.
  • break sale, continue salta a la siguiente iteración, else se ejecuta si no hubo break.
  • For anidados procesan estructuras profundas (listas de listas, dicts con sublistas).
  • Los anti-patrones (range(len())) se reemplazan con enumerate y zip.

En la siguiente lección (18 · Funciones básicas) vas a aprender a crear tus propias funciones con def: parámetros, return, docstrings, valores por defecto y el principio DRY que hace tu código reutilizable.

Recursos: Python docs — for · range