Sentencia iterativa for

La sentencia iterativa for nos permite ejecutar un proceso un número determinado de veces o para un conjunto determinado de valores. Para explicar este último comentario veamos la estructura de este tipo de bucles:

for variable in serie-de-valores:

    código

Si quisiéramos leer esta instrucción sería algo como "para cada valor que hay en serie-de-valores, asigna dicho valor a 'variable' y ejecuta el código que le sigue". Es decir, se va a ejecutar el código una vez para cada uno de los elementos en "serie-de-valores". Comencemos por el ejemplo más simple, cuando la serie de valores son números:

Sentencia iterativa for

Para cada ejecución del código, la variable n va tomando cada uno de los valores de la lista [1, 2, 3], y el código que se repite simplemente imprime el valor de n. Hay tres valores en la lista, y el código se repite tres veces. En este caso hemos especificado los valores que va a tomar n con una lista, pero podríamos haber utilizado una tupla u otra estructura.

En un caso como éste, en lugar de incluir la lista explícita de valores que va a tomar la variable n puede utilizarse una función como range. Esta función --que ya hemos visto- genera un conjunto de números entre dos valores, pudiendo especificarse el incremento entre los valores. La gran ventaja de range respecto de una lista o una tupla es que la lista o tupla va a ocupar un tamaño en memoria proporcional al número de elementos que la compone. range, por el contrario, va a ocupar siempre el mismo tamaño (pequeño) pues solo se van a generar los números que representa a medida que sean necesarios. Es decir, algo como range(1, 1000000) no genera un millón de valores y los almacena en memoria. Simplemente se crea un "objeto range" que irá generando ese millón de números cuando se soliciten.

El código mostrado en In [260] podría reescribirse de la siguiente forma, por tanto:

Sentencia iterativa for

Recuerda que los números generados por range(a, b) van desde a (incluido) hasta b (sin incluir), por lo que deberemos especificar como límites 1 y 4 si queremos que los valores generados sean 1, 2, y 3.

Si simplemente queremos especificar el número de veces que queremos que se repita el proceso, digamos 3 veces, bastará con escribir for n in range(3): pues ya sabemos que esto generará todos los valores entre 0 y 2, es decir, 3 números:

Sentencia iterativa for

Los valores a recorrer no tienen por qué ser siempre numéricos, por ejemplo:

Sentencia iterativa for

Bucles for con diccionarios

Un caso interesante (y práctico) es el uso de este tipo de bucles con diccionarios. Si recuerdas, el método items devolvía una estructura semejante a una lista que contenía tuplas con cada pareja clave-valor:

Sentencia iterativa for

Pues bien, si recorremos esta lista estaremos extrayendo tuplas (pues se trata de una lista de tuplas), por lo que podemos asignar a una tupla de variables la tupla extraída en cada iteración del bucle for:

Sentencia iterativa for con diccionarios

En la práctica no es necesario encerrar las dos variables a los que se asignan los valores entre paréntesis, pudiéndose escribir simplemente lo siguiente:

Sentencia iterativa for con diccionarios