El for de Python no cuenta: recorre. Le das algo con elementos —una lista, una cadena, un diccionario— y te los va dando uno por uno. Contar números es solo un caso particular.
También te puede interesar
range
print(list(range(5, 10))) print(list(range(10))[-1]) print(list(range(0, 10, 2))) print(list(range(0, -10, -2)))
salida[5, 6, 7, 8, 9] 9 [0, 2, 4, 6, 8] [0, -2, -4, -6, -8]
range(inicio, fin, paso). El final nunca se incluye: range(5, 10) llega hasta el 9 y range(10) va del 0 al 9, diez números. El paso puede ser negativo para contar hacia atrás. Lo de list(...) es solo para verlo impreso: range no genera los números de golpe, los va dando según se piden, y por eso range(1_000_000_000) no gasta memoria.
Recorrer cualquier cosa
for fruta in ["manzana", "pera", "uva"]:
print(fruta, end=" ")salidamanzana pera uva
Así se recorre en Python. Si vienes de otro lenguaje, la tentación es escribir for i in range(len(lista)): y luego lista[i]; funciona, pero no hace falta.
Cuando sí necesitas el número: enumerate
for i, fruta in enumerate(["manzana", "pera", "uva"], start=1):
print(f"{i}. {fruta}")salida1. manzana 2. pera 3. uva
Dos listas a la vez: zip
for nombre, nota in zip(["ana", "luis"], [9, 6]):
print(nombre, nota)salidaana 9 luis 6
Un diccionario
for clave, valor in {"a": 1, "b": 2}.items():
print(clave, "=", valor)salidaa = 1 b = 2
El else del for
for n in [3, 7, 11]:
if n % 2 == 0:
print("hay un par:", n)
break
else:
print("no había ningún par")salidano había ningún par
Es lo más raro del for de Python y es útil: el else se ejecuta solo si el bucle terminó sin break. Sirve justo para buscar: si lo encuentras, sales con break; si llegas al final, el else te avisa de que no estaba. En la versión anterior de esta página había un else que no explicaba esto, y sin la explicación parece que se ejecuta siempre.
No borres mientras recorres
numeros = [1, 2, 3, 4]
for n in numeros:
if n % 2 == 0:
numeros.remove(n)
print(numeros)
numeros = [2, 4, 6, 8]
for n in numeros:
if n % 2 == 0:
numeros.remove(n)
print(numeros)salida[1, 3] [4, 8]
[2, 4, 6, 8] se salta el 4 y el 8 y no da ningún error: simplemente deja datos que no debía. Si necesitas quitar elementos, construye una lista nueva.Listas por comprensión
print([n for n in [2, 4, 6, 8] if n % 2 != 0]) print([x * x for x in range(1, 6)])
salida[] [1, 4, 9, 16, 25]
Cuando el bucle solo sirve para construir una lista, esta forma lo dice en una línea: «la lista de x por x para cada x de este rango». Es también la forma correcta de filtrar del apartado anterior. Si la línea se alarga y cuesta leerla, vuelve al for normal.
Más información en inglés: For loop and range in Python.
Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.