En Python existen muchos objetos como por ejemplo las cadenas de texto (strings), las listas, los diccionarios, y las tuplas que son “iterables”. Esto significa que podemos iterar sobre sus elementos: cada uno de los caracteres de una cadena de texto, cada uno de los elemento de una lista, etc. Esta operación se realiza con un bloque de código llamado bucle for
que indica las operaciones a realizar en cada iteración.
Estructura básica de un bucle for
En lenguajes como C, C++ y Java entre otros, los bucles for
se realizan mediante una variable de control y constan de tres partes:
- Inicialización: es donde se asigna el valor inicial a la variable de control.
- Condición de terminación: es una expresión booleana en relación a la variable de control que determina al final de cada iteración si se termina el bucle.
- Iteración: determina el cambio que se realiza a la variable de control al final de cada iteración.
Este tipo de bucles se expresa de la siguiente forma:
// Código Java for(i=0; i<10; i++) { // Hacer algo }
En este bloque de código i
es la variable de control, la cual:
- Se ha inicializado con valor 0.
- Continúa iterando mientras su valor sea mas pequeño que 10.
- Al final de cada iteración incrementa su valor en 1.
En Python, en cambio, no se especifica ninguna variable de control para realizar bucles for
. En lugar de ello se itera sobre una colección de objetos.
# Python for elemento in iterable: # Hacer algo con el elemento
En este caso, en cada nueva iteración el “elemento” toma el valor del siguiente elemento del objeto “iterable”. Además como ocurre con las sentencias if, se requiere el uso de los dos puntos (:) al final de la sentencia y el cuerpo del bucle se tiene que indentar.
Iterar una lista
Para recorrer los elementos de una lista con un bucle for
, hay que dar un nombre a la variable que va tomando los elementos de la lista en cada iteración. En el siguiente ejemplo se itera sobre los elementos de la lista mi_lista
mediante la variable n
.
>>> mi_lista = [1, 2, 3] >>> for n in mi_lista: ... print(n) ... 1 2 3
Iterar un diccionario
Iterar los elementos de un diccionario se puede realizar de distintas formas. Si lo hacemos del mismo modo que recorremos los elementos una lista estamos iterando directamente sobre las claves del diccionario, tal y como refleja el siguiente bloque de código.
>>> mi_diccionario = {'uno':1, 'dos':2, 'tres':3} >>> for c in mi_diccionario: ... print(c) ... uno dos tres
En caso que nos interese realizar alguna operación con los valores del diccionario, podemos acceder directamente a ellos como de costumbre.
>>> mi_diccionario = {'uno':1, 'dos':2, 'tres':3} >>> for c in mi_diccionario: ... print(mi_diccionario[c]) ... 1 2 3
Otra opción es iterar directamente sobre los valores usando el método values()
del diccionario.
>>> mi_diccionario = {'uno':1, 'dos':2, 'tres':3} >>> for v in mi_diccionario.values(): ... print(v) ... 1 2 3
También podemos iterar simultáneamente sobre las claves y valores de un diccionario. En concreto, el método items()
retorna una lista de tuplas con los pares clave-valor del diccionario las cuales podemos desembalar.
>>> mi_diccionario = {'uno':1, 'dos':2, 'tres':3} >>> for c, v in mi_diccionario.items(): ... print('Clave:', c, ', Valor:', v) ... Clave: uno , Valor: 1 Clave: dos , Valor: 2 Clave: tres , Valor: 3
Función range()
La función range()
es una función integrada en Python que crea una secuencia ordenada de enteros que podemos utilizar para crear iteraciones similares a las que hemos visto para otros lenguajes de programación. Por ello la función range()
acepta tres números enteros de los cuales dos son opcionales.
range(inicio, fin, paso)
- Inicio: es el valor inicial de la secuencia (0 si no se especifica).
- Fin: es el valor final de la secuencia, el cual no se incluye en el resultado.
- Paso: indica el incremento entre elementos de la secuencia (1 si no se especifica).
La función range()
retorna objetos de tipo range los cuales podemos convertir en una lista o tupla.
>>> r = range(1,10,2) >>> type(r) <class 'range'> >>> list(r) [1, 3, 5, 7, 9] >>> tuple(r) (1, 3, 5, 7, 9)
Como los objetos de tipo range son iterables, también podemos usar esta función para iterar en un bucle for.
>>> for i in range(5): ... print(i) ... 0 1 2 3 4
Sentencias break y continue
Las sentencias break
y continue
modifican el flujo normal de un bucle for
. En concreto break
interrumpe completamente el bucle, procediendo a la instrucción que viene después del bucle.
>>> for i in range(10): ... if i > 4: ... break ... print(i) ... 0 1 2 3 4
Por su parte la sentencia continue
termina la iteración actual del bucle y pasa a la siguiente.
>>> for i in range(10): ... if i % 2 is 0: ... continue ... print(i) ... 1 3 5 7 9