W3docs

Bucles For en Python

Aprende cómo funcionan los bucles for en Python: sintaxis, range(), enumerate(), break, continue, else, bucles anidados e iteración sobre listas, strings y diccionarios.

Un bucle for en Python itera sobre cada elemento de una secuencia — una lista, tupla, string, diccionario, conjunto o cualquier otro iterable — y ejecuta un bloque de código una vez por elemento. A diferencia de otros lenguajes donde for normalmente cuenta números, el for de Python es un bucle for-each que recorre los elementos directamente.

Este capítulo cubre:

  • Sintaxis básica y cómo funciona la variable del bucle
  • La función range() para bucles con conteo
  • break, continue y la cláusula else
  • enumerate() y zip() para iteraciones más ricas
  • Iteración sobre strings, diccionarios y estructuras anidadas
  • Bucles for anidados
  • La sentencia pass como marcador de posición

Sintaxis básica

for variable in iterable:
    # block executed once per item

variable recibe cada elemento sucesivo del iterable. El bloque con sangría se ejecuta una vez por cada elemento.

Iteración sobre una lista

python— editable, runs on the server

Salida:

apple
banana
cherry

El bucle asigna "apple" a fruit, ejecuta print(fruit), luego pasa a "banana", y así sucesivamente hasta agotar todos los elementos.

Iteración sobre un string

Un string es en sí mismo un iterable — cada carácter es un elemento:

for ch in "Python":
    print(ch)

Salida:

P
y
t
h
o
n

La función range()

range() genera una secuencia de enteros bajo demanda. Es la forma más común de ejecutar un bucle un número específico de veces.

range(stop)
range(start, stop)
range(start, stop, step)
ParámetroValor por defectoSignificado
start0Primer valor (inclusive)
stoprequeridoLímite superior (exclusivo)
step1Incremento entre valores

Contar del 1 al 5

python— editable, runs on the server

Salida:

1
2
3
4
5

range(1, 6) produce 1, 2, 3, 4, 5 — el valor de parada 6 no está incluido.

Contar en pasos

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

Salida:

0
2
4
6
8

Contar hacia atrás

Un paso negativo itera en orden inverso:

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

Salida:

10
8
6
4
2

La sentencia break

break sale del bucle de inmediato, antes de que se hayan visitado todos los elementos.

for i in range(1, 6):
    if i == 3:
        break
    print(i)

Salida:

1
2

Cuando i es igual a 3, se ejecuta break y el bucle se detiene — 3, 4 y 5 nunca se imprimen.

Cuándo usar break: al buscar en una lista y querer detener la búsqueda en cuanto se encuentra una coincidencia; para salir anticipadamente de un cálculo largo.


La sentencia continue

continue omite el resto de la iteración actual y pasa directamente al siguiente elemento.

for i in range(1, 6):
    if i == 3:
        continue
    print(i)

Salida:

1
2
4
5

Cuando i es igual a 3, continue omite print(i) y salta a i = 4.


La cláusula else

El bucle for de Python admite un bloque else opcional que se ejecuta solo si el bucle se completó normalmente (es decir, no fue terminado por break).

for i in range(1, 4):
    print(i)
else:
    print("Loop finished")

Salida:

1
2
3
Loop finished

Si el bucle sale mediante break, el bloque else se omite:

for i in range(1, 6):
    if i == 3:
        break
    print(i)
else:
    print("Loop finished without break")

Salida:

1
2

La cláusula else es útil para indicar si una búsqueda tuvo éxito — si se ejecuta break al encontrar una coincidencia, el bloque else solo se ejecuta cuando no se encontró ninguna.


enumerate() — bucle con índice y valor

enumerate() empareja cada elemento con su índice de posición, de modo que obtienes ambos en un mismo bucle sin necesidad de una variable contador separada.

colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
    print(index, color)

Salida:

0 red
1 green
2 blue

Para comenzar a contar desde un número diferente, se pasa start:

fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
    print(i, fruit)

Salida:

1 apple
2 banana
3 cherry

zip() — iterar sobre dos secuencias a la vez

zip() empareja elementos de dos (o más) iterables uno a uno:

names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
    print(name, score)

Salida:

Alice 95
Bob 87
Charlie 92

zip() se detiene cuando se agota el iterable más corto.


Iteración sobre diccionarios

Iterar sobre un diccionario por defecto devuelve sus claves:

person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
    print(key, ":", person[key])

Salida:

name : Alice
age : 30
city : Paris

Usa .items() para obtener pares clave-valor juntos:

for key, value in person.items():
    print(key, ":", value)

Salida:

name : Alice
age : 30
city : Paris

Consulta también el capítulo Loop Dictionaries para más patrones.


Bucles for anidados

Un bucle for puede colocarse dentro de otro bucle for. El bucle interior se ejecuta completamente en cada iteración del bucle exterior.

python— editable, runs on the server

Salida:

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

Atención: break dentro de un bucle anidado solo sale del bucle interior, no de ambos. Para salir de ambos bucles a la vez necesitas una variable bandera o refactorizar en una función y usar return.


La sentencia pass

pass es un marcador de posición sin operación. Úsalo cuando un bucle for es sintácticamente necesario pero aún no tienes nada que poner en el cuerpo:

for i in range(3):
    pass  # TODO: implement later

Sin pass, Python lanzaría un IndentationError porque un bloque vacío es sintaxis inválida.


Bucles for vs comprensiones de lista

Un patrón común es construir una nueva lista dentro de un bucle for:

squares = []
for x in range(1, 6):
    squares.append(x ** 2)
print(squares)

Salida: [1, 4, 9, 16, 25]

Python ofrece una alternativa más concisa llamada comprensión de lista:

squares = [x ** 2 for x in range(1, 6)]
print(squares)

Salida: [1, 4, 9, 16, 25]

Las comprensiones de lista son idiomáticas para transformaciones simples; usa un bucle for normal cuando el cuerpo es complejo o tiene efectos secundarios.


Elegir entre for y while

SituaciónPreferir
Conoces el número de iteraciones o tienes un iterablefor
Iteras hasta que cambia una condiciónwhile
Necesitas índice y valorfor + enumerate()
Iteras sobre dos listas a la vezfor + zip()

Práctica

Práctica
Which built-in function generates a sequence of integers for use in a for loop?
Which built-in function generates a sequence of integers for use in a for loop?
Práctica
What does the else clause of a for loop do?
What does the else clause of a for loop do?
Práctica
What are the primary uses of for loops in Python?
What are the primary uses of for loops in Python?
Was this page helpful?