**for en Python – El bucle for en Python: estructura y ejemplos**
Categoría: Tutoriales Python - El bucle for en Python
El bucle for en Python es una de las estructuras que más utilizarás en tus programas.
A continuación veremos por qué el bucle for en Python es importante, cuándo usarlo y cómo.
El bucle for en python
El bucle for se utiliza para recorrer los elementos de un objeto iterable (lista, tupla, conjunto, diccionario, …) y ejecutar un bloque de código. En cada paso de la iteración se tiene en cuenta a un único elemento del objeto iterable, sobre el cuál se pueden aplicar una serie de operaciones.
Su sintaxis es la siguiente:
for elem in iterable:
código
Aquí, elem es la variable que toma el valor del elemento dentro del iterador en cada paso del bucle. Este finaliza su ejecución cuando se recorren todos los elementos.
Como te indicaba, es muy frecuente usar el bucle for para iterar sobre los elementos de listas, tuplas o diccionarios.
Ejemplo de cómo usar el bucle for
Imaginemos que tenemos una lista de números y queremos mostrarlos por consola. El código podría ser así:
nums = [4, 78, 9, 84]
for n in nums:
print(n)
4
78
9
84
Qué es un iterable
Veamos con más detalle el concepto de iterable mencionado en el apartado anterior. Un iterable es un objeto que se puede iterar sobre él, es decir, que permite recorrer sus elementos uno a uno. Para ser más técnico, un objeto iterable es aquél que puede pasarse como parámetro de la función iter().
Esta función devuelve un iterador basado en el objeto iterable que se pasa como parámetro.
Finalmente, un iterador es un objeto que define un mecanismo para recorrer los elementos del iterable asociado.
Te lo enseño mejor con un ejemplo:
nums = [4, 78, 9, 84]
it = iter(nums)
next(it)
4next(it)
78next(it)
9next(it)
84next(it)
Traceback (most recent call last):
File “<input>”, line 1, in <module>
StopIteration
Como puedes observar, un iterador recorre los elementos de un iterable solo hacia delante. Cada vez que se llama a la función next() se recupera el siguiente valor del iterador.
En Python, los tipos principales list, tuple, dict, set o string entre otros, son iterables, por lo que podrán ser usados en el bucle for.
Bucle for en diccionarios
Un caso es especial de bucle for se da al recorrer los elementos de un diccionario. Dado que un diccionario está compuesto por pares clave/valor, hay distintas formas de iterar sobre ellas.
1 – Recorrer las claves del diccionario.
valores = {‘A’: 4, ‘E’: 3, ‘I’: 1, ‘O’: 0}
for k in valores:
print(k)
A
E
I
O
2 – Iterar sobre los valores del diccionario
valores = {‘A’: 4, ‘E’: 3, ‘I’: 1, ‘O’: 0}
for v in valores.values():
print(v)
4
3
1
0
3 – Iterar a la vez sobre la clave y el valor de cada uno de los elementos del diccionario.
valores = {‘A’: 4, ‘E’: 3, ‘I’: 1, ‘O’: 0}
for k, v in valores.items():
print(‘k=’, k, ‘, v=’, v)
k=A, v=4
k=E, v=3
k=I, v=1
k=O, v=0
Python for y la clase range
¿Cómo implementamos y/o simulamos en Python el bucle for basado en una secuencia numérica? Para estos casos, Python pone a nuestra disposición la clase range (en Python 2 era una función). El constructor de esta clase, range(max), devuelve un iterable cuyos valores van desde 0 hasta max - 1.
for i in range(11):
print(i)
0
1
2
3
…
10
El tipo de datos range se puede invocar con uno, dos e incluso tres parámetros:
range(max): Un iterable de números enteros consecutivos que empieza en 0 y acaba en max - 1
range(min, max): Un iterable de números enteros consecutivos que empieza en min y acaba en max - 1
range(min, max, step): Un iterable de números enteros consecutivos que empieza en min acaba en max - 1 y los valores se van incrementando de step en step. Este último caso simula el bucle for con variable de control.
Por ejemplo, para mostrar por pantalla los números pares del 0 al 10 podríamos usar la función range del siguiente modo:
for num in range(0, 11, 2):
print(num)
0
2
4
6
8
10
for _ in <iterable>
En ocasiones, es posible que el elemento actual del iterable que se está recorriendo sea irrelevante. En estos casos puedes usar la variable _ para indicar esta situación. No obstante, yo no te lo recomiendo ya que también se suele usar en librerías de traducciones de texto. Aún así, te muestro un caso de uso. Imagínate que queremos implementar una función que devuelva la longitud de una lista. El código podría ser como el que te muestro a continuación:
def longitud(mi_lista):
cont = 0
for _ in mi_lista:
cont += 1
return cont
Modificando la iteración del bucle for: break y continue
Por último, vamos a ver que es posible alterar la iteración de un bucle for en Python. Para ello, nos valdremos de las sentencias break y continue. Pero, ¿qué hacen estas sentencias?
break se utiliza para finalizar y salir el bucle, por ejemplo, si se cumple alguna condición.
Por su parte, continue salta al siguiente paso de la iteración, ignorando todas las sentencias que le siguen y que forman parte del bucle.
Un ejemplo es la mejor manera de entenderlo.
Uso de break. Encontrar un elemento en una colección
coleccion = [2, 4, 5, 7, 8, 9, 3, 4]
for e in coleccion:
if e == 7:
break
print(e)
El código anterior mostrará los números 2, 4 y 5.
Uso de continue. Imprimir solo los números pares de una colección
coleccion = [2, 4, 5, 7, 8, 9, 3, 4]
for e in coleccion:
if e % 2 != 0:
continue
print(e)
En este caso, el código anterior mostrará los números 2, 4, 8 y 4.
for … else
En relación al apartado anterior, Python ofrece una estructura adicional de bucle for cuya estructura es la siguiente:
for e in iterable:
# Tu código aquí
else:
# Este código siempre se ejecuta si no
# se ejecutó la sentencia break en el bloque for
Es decir, el código del bloque else se ejecutará siempre y cuando no se haya ejecutado la sentencia break dentro del bloque del for.
Veamos un ejemplo:
numeros = [1, 2, 4, 3, 5, 8, 6]
for n in numeros:
if n == 3:
break
else:
print(‘No se encontró el número 3’)
Como en el ejemplo anterior la secuencia numeros contiene al número 3, la instrucción print nunca se ejecutará.