Curso de Python / Recorrer datos con for, range, enumerate y zip
Un bucle for procesa los elementos de un iterable. Recorre directamente los valores cuando sea posible, utiliza enumerate() si necesitas numerarlos y zip() para leer conjuntamente colecciones relacionadas.
Recorrer valores o un intervalo numérico
En Python no necesitas incrementar manualmente un índice para recorrer una lista. También puedes iterar directamente sobre cadenas y otros iterables. range(inicio, fin, paso) representa una progresión que excluye fin; con un paso negativo permite contar hacia atrás.
for value in range(1, 4):
print(value)
El programa muestra 1, 2 y 3 en líneas separadas. El cuatro no forma parte del recorrido. range tampoco es una lista construida de antemano con todos los números: representa el intervalo de una forma que permite iterarlo sin almacenar una lista equivalente.
Comprobar si el extremo final se incluye evita errores en la cantidad de repeticiones. Si lo que necesitas son los valores de una colección existente, recórrelos directamente antes de añadir índices que no aportan información.
Unir nombres e importes y añadir una numeración
Guarda este contenido como for_loop.py, en UTF-8. Ejecuta python for_loop.py desde la carpeta de práctica con el entorno virtual seleccionado. Fuera del entorno en macOS o Ubuntu, utiliza python3 si es la orden de tu intérprete.
names = ["coffee", "lunch", "bus"]
amounts = [3500, 8000, 2500]
for number, (name, amount) in enumerate(zip(names, amounts, strict=True), start=1):
print(number, name, amount)
print(list(range(5, 0, -2)))
La salida esperada es:
1 coffee 3500
2 lunch 8000
3 bus 2500
[5, 3, 1]
zip() produce cada par de nombre e importe. enumerate() añade el contador. El desempaquetado anidado distribuye el número y los dos campos entre los nombres correspondientes, siguiendo las reglas de desempaquetado de secuencias.
Distinguir numeración, índices y longitudes
enumerate(..., start=1) inicia el contador de presentación en uno, pero no cambia los índices de las listas originales: su primera posición sigue siendo cero. Utilizar ese contador como índice de la lista puede desplazar los datos o provocar un error. Aprovecha el valor que ya proporciona el recorrido.
Un zip() normal se detiene al terminar la entrada más corta. Si las longitudes deben coincidir, strict=True hace visible una diferencia en lugar de omitir registros silenciosamente. Esta opción está disponible desde Python 3.10; consulta la referencia oficial de zip.
Cuando crece la cantidad de campos, una lista de diccionarios puede expresar mejor la relación entre los datos que varias listas paralelas. Lo importante es evitar que nombre e importe pierdan su correspondencia.
Comprobar límites y evitar cambios durante el recorrido
- Quita el último importe y observa el error de
zip(..., strict=True). - Quita también
strict=Truey compara el resultado de solo dos registros. Después restaura tanto las listas como la opción. - Predice
range(5, -1, -2): produce 5, 3 y 1 porque el extremo -1 está excluido.
Eliminar elementos de la lista que estás recorriendo desplaza sus posiciones y puede omitir datos. Reúne los cambios por separado o construye un resultado filtrado. Distingue un recorrido de lectura de una operación que modifica su origen.
Un iterable vacío hace que el cuerpo del bucle se ejecute cero veces. Si necesitas utilizar después un contador o un acumulador, inicialízalo antes del bucle para cubrir también la ausencia de elementos.




