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.
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
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.
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 |
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 usesfor 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")
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.Ejemplos explicados paso a paso
Ejemplo 1: For sobre distintos iterables
Hacé clic en ▶ Ejecutar
Ejemplo 2: range() en profundidad
Hacé clic en ▶ Ejecutar
Ejemplo 3: enumerate y zip — los mejores amigos del for
Hacé clic en ▶ Ejecutar
Ejemplo 4: break, continue y for/else
Hacé clic en ▶ Ejecutar
Ejemplo 5: For anidados — procesar tablas y matrices
Hacé clic en ▶ Ejecutar
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(): |
Ejercicios
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
Ejercicio 3: range para generar secuencia
Imprimí los múltiplos de 5 del 5 al 50 usando range(5, 51, 5). Debe incluir 50.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.breaksale,continuesalta a la siguiente iteración,elsese ejecuta si no hubo break.- For anidados procesan estructuras profundas (listas de listas, dicts con sublistas).
- Los anti-patrones (
range(len())) se reemplazan conenumerateyzip.
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