W3docs

Recorrer Listas

Aprende a recorrer listas en Python con bucles for, while, enumerate(), zip(), break, continue y comprensiones de listas con ejemplos.

Recorrer una lista — visitar cada elemento uno por uno — es una de las operaciones más comunes en Python. Este capítulo cubre todas las formas prácticas de hacerlo: bucles for, bucles while, enumerate(), zip(), break y continue, y comprensiones de listas. También explica los errores comunes a tener en cuenta al modificar una lista mientras se itera.

¿Por qué recorrer una lista?

Una lista de Python contiene una secuencia ordenada de elementos. Los bucles te permiten actuar sobre cada elemento sin escribir una línea de código por elemento. Ya sea que estés sumando precios, filtrando registros o transformando cadenas de texto, un bucle suele ser la herramienta adecuada.

Recorrer con un bucle for

La forma más simple y legible de iterar sobre una lista es un bucle for.

fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
    print(fruit)
apple
banana
cherry

Python asigna cada elemento a fruit por turno, ejecuta el bloque indentado y luego pasa al siguiente elemento. El bucle se detiene automáticamente cuando se agota la lista — no se necesita gestión de índices.

Recorrer con range() y un índice

Cuando necesitas tanto el índice como el valor, puedes combinar range() con len():

colors = ['red', 'green', 'blue']
for i in range(len(colors)):
    print(i, colors[i])
0 red
1 green
2 blue

Esto funciona, pero enumerate() (tratado a continuación) es más limpio para este patrón.

Recorrer con enumerate()

enumerate() empareja cada elemento con su índice y es el enfoque idiomático de Python cuando necesitas ambos:

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(index, fruit)
0 apple
1 banana
2 cherry

Puedes comenzar el contador en un número diferente pasando un segundo argumento:

for index, fruit in enumerate(['apple', 'banana', 'cherry'], start=1):
    print(index, fruit)
1 apple
2 banana
3 cherry

Recorrer dos listas con zip()

zip() empareja elementos de dos (o más) listas para que puedas iterarlos en paralelo:

names  = ['Alice', 'Bob', 'Carol']
scores = [92, 85, 78]

for name, score in zip(names, scores):
    print(name, '->', score)
Alice -> 92
Bob -> 85
Carol -> 78

Si las listas tienen longitudes diferentes, zip() se detiene en la más corta. Usa itertools.zip_longest() si necesitas continuar hasta el final de la lista más larga.

Recorrer con un bucle while

Un bucle while sigue ejecutándose mientras una condición sea True. Tú gestionas el índice manualmente:

numbers = [10, 20, 30, 40, 50]
i = 0
while i < len(numbers):
    print(numbers[i])
    i += 1
10
20
30
40
50

Los bucles while son útiles cuando la condición de parada no es simplemente "fin de la lista" — por ejemplo, buscar un elemento y detenerse tan pronto como se encuentre.

Controlar la ejecución del bucle

break — Salir anticipadamente

break detiene el bucle de inmediato. Esto es útil cuando has encontrado lo que buscabas y no necesitas seguir iterando:

fruits = ['apple', 'banana', 'cherry', 'date']
for fruit in fruits:
    if fruit == 'cherry':
        print('Found it!')
        break
    print(fruit)
apple
banana
Found it!

continue — Saltar un elemento

continue salta a la siguiente iteración sin ejecutar las líneas restantes del bloque actual:

numbers = [1, 2, 3, 4, 5, 6]
for n in numbers:
    if n % 2 == 0:
        continue        # skip even numbers
    print(n)
1
3
5

La cláusula else en un bucle

Un bucle for o while puede tener un bloque else que se ejecuta cuando el bucle termina sin haber alcanzado un break. Esto es útil para patrones de "buscar y reportar":

target = 7
numbers = [1, 3, 5, 9]

for n in numbers:
    if n == target:
        print('Found', target)
        break
else:
    print(target, 'not in list')
7 not in list

Recorrer un segmento de lista

Puedes iterar sobre una parte de una lista segmentándola:

items = ['a', 'b', 'c', 'd', 'e']
for item in items[1:4]:   # indices 1, 2, 3
    print(item)
b
c
d

Recorrer en orden inverso con un segmento:

for item in items[::-1]:
    print(item)
e
d
c
b
a

Bucles anidados

Puedes anidar bucles for para trabajar con listas de listas o calcular combinaciones:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
for row in matrix:
    for value in row:
        print(value, end=' ')
    print()
1 2 3 
4 5 6 
7 8 9 

El bucle interior completa todas sus iteraciones por cada iteración individual del bucle exterior.

Comprensiones de listas como alternativa al bucle

Una comprensión de lista crea una nueva lista aplicando una expresión a cada elemento — es una alternativa compacta y legible a un bucle for que construye una lista:

numbers = [1, 2, 3, 4, 5]

# for loop approach
squares = []
for n in numbers:
    squares.append(n ** 2)

# list comprehension — same result in one line
squares = [n ** 2 for n in numbers]

print(squares)
[1, 4, 9, 16, 25]

Puedes añadir una condición para filtrar elementos al mismo tiempo:

evens = [n for n in range(1, 11) if n % 2 == 0]
print(evens)
[2, 4, 6, 8, 10]

Error común: modificar una lista mientras se itera

No añadas ni elimines elementos de una lista dentro de un bucle for que itera sobre esa misma lista. El índice interno del bucle se basa en la longitud original, por lo que los elementos pueden saltarse o visitarse dos veces.

# BAD — skips items
numbers = [1, 2, 3, 4, 5]
for n in numbers:
    if n % 2 == 0:
        numbers.remove(n)   # mutates the list mid-loop
print(numbers)              # [1, 3, 5] may look correct here but...

El patrón seguro es iterar sobre una copia de la lista, o construir una nueva lista con una comprensión:

numbers = [1, 2, 3, 4, 5]
numbers = [n for n in numbers if n % 2 != 0]
print(numbers)
[1, 3, 5]

Operaciones básicas de lista usadas con bucles

Las secciones a continuación recapitulan los métodos de lista más utilizados junto con los bucles. Consulta Métodos de lista de Python para la referencia completa.

Añadir elementos

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)
[1, 2, 3, 4]

Eliminar elementos

remove() elimina el primer valor coincidente y lanza un ValueError si el elemento no se encuentra.

my_list = [1, 2, 3, 4, 5]
my_list.remove(3)
print(my_list)
[1, 2, 4, 5]

Ordenar una lista

my_list = [3, 1, 4, 2, 5]
my_list.sort()
print(my_list)
[1, 2, 3, 4, 5]

sort() modifica la lista en su lugar. Para obtener una copia ordenada sin cambiar el original, usa la función integrada sorted(). Consulta Ordenar listas para ordenar en reversa, ordenar por clave y más.

Temas relacionados

Práctica

Práctica
¿Cuál de las siguientes opciones imprime correctamente cada elemento de una lista llamada 'items' usando un bucle for?
¿Cuál de las siguientes opciones imprime correctamente cada elemento de una lista llamada 'items' usando un bucle for?
Was this page helpful?