Ciclo for en Python
¡Hola y bienvenidos!. Si estás aprendiendo Python, esta guía es para ti, encontraras una exhaustiva descripción de la sintaxis de Python y montones de código de ejemplos para ayudarte en tu aprendizaje.
Esta guía es una adaptación y traducción de un artículo original de Estefania Cassingena Navone que lo puedes encontrar en FreeCodeCamp.org
💡Anotación: A lo largo de esta guía, voy a usar
<>
para indicar que esta parte de la sintaxis será remplazada por el elemento descrito por el texto dentro de ella. Un ejemplo de ello seriay para temas prácticos voy a usar un diminutivo esto quiere decir que será remplazado por el nombre de una variable cuando escribamos el código.
Manos a la obra
Ahora vas a saber como escribir condiciones en Python, vamos a iniciar con los ciclos. El ciclo for es una de esas estructuras de programación que vamos a usar para repetir un bloque de código un número específico de veces.
Esta es la sintaxis básica para escribir ciclos en Python:
1 | for <variable_del_ciclo> in <iterable>: |
El iterable puede ser una lista, una tupla, un diccionario, un string (cadena de texto), un rango, un archivo, o cualquier otro tipo de dato iterable en Python. Vamos a empezar con range()
.
Función range()
en Python
Esta función retorna una secuencia de números enteros que usamos para determinar cuantas iteraciones (repeticiones) del ciclo hemos completado. El ciclo completa una iteración por entero.
💡Anotación: Cada entero es asignado por el ciclo a la variable del ciclo uno en uno por iteración.
Esta es la sintaxis general para escribir un ciclo for con la función range()
:
1 | for <variable_del_ciclo> in range(<inicio>, <fin>, <paso>): |
Como puedes ver, el rango es una función que tiene tres parámetros:
inicio
: es donde comenzara la secuencia de números enteros. Por defecto es0
.fin
: es donde finalizara la secuencia de números enteros (sin incluir este valor).paso
: el valor que se irá sumando en cada iteración al valor anterior. De forma predeterminada es 1.
Puedes pasar 1, 2, o 3 argumentos a la función range()
:
Con 1 argumento que le demos a la función
range()
, el valor es asignado al parámetrofin
y los demás parámetros quedan con los valores por defecto.Con 2 argumentos que le pasemos a la función
range()
, serán asignamos a los parámetrosinicio
yfin
en ese orden especifico quedando el parámetropaso
con su valor por defecto.Con los 3 argumentos, los valores serán asignados a los argumentos
inicio
,fin
ypaso
en ese orden.
Algunos ejercicios con un parámetro:
1 | for i in range(5): |
Salida:
1 | 0 |
💡Anotación: La variable del ciclo es actualizada automáticamente por el ciclo.
1 | for j in range(15): |
Salida:
1 | 0 |
En el ejemplo siguiente repetiremos un string tantas veces como lo indique la variable del ciclo:
1 | for num in range(8): |
Salida:
1 | Hola |
También podemos usar el ciclo for con estructuras de datos integradas como las listas:
1 | mi_lista = ["a", "b", "c", "d"] |
Salida:
1 | a |
💡Anotación: Cuando uses range(len(
)), estás usando números que van desde 0 hasta len( )-1. Esto representa la secuencia de índices válidos.
Algunos ejemplos con dos parámetros:
1 | for i in range(2, 10): |
Salida:
1 | 2 |
Código:
1 | for j in range(2, 5): |
Salida:
1 | PythonPython |
Código:
1 | mi_lista = ["a", "b", "c", "d"] |
Salida:
1 | c |
Código:
1 | mi_lista = ["a", "b", "c", "d"] |
Ahora la lista es: ['a', 'b', 'cc', 'd']
Algunos ejemplos con tres parámetros:
1 | for i in range(3, 16, 2): |
Salida:
1 | 3 |
Código:
1 | for j in range(10, 5, -1): |
Salida:
1 | 10 |
Código:
1 | mi_lista = ["a", "b", "c", "d", "e", "f", "g"] |
Salida:
1 | g |
Como iterar sobre iterables en Python
Podemos iterar directamente sobre iterables como son listas, tuplas, diccionarios, strings, y archivos usando el ciclo for. Podemos obtener cada uno de los elementos una vez por iteraciones. Esto es muy útil para trabajar directamente con ellos.
Veamos algunos ejemplos:
Iterando sobre strings
Si iteramos sobre un string, estos caracteres se asignaran a la variable del ciclo uno por uno (incluyendo espacios y símbolos).
1 | mensaje = "Hola, ¡Mundo!" |
Salida:
1 | H |
También podemos iterar sobre copias del string usando métodos de un string cuando especificamos el iterable en el ciclo for. Esto asignará la copia del string como el iterable que será usando para la iteración, como esto:
1 | palabra = "Hola" |
Salida:
1 | h |
1 | palabra = "Hola" |
Salida:
1 | H |
Iterando sobre listas y Tuplas
1 | mi_lista = [2, 3, 4, 5] |
Salida:
1 | 2 |
Código:
1 | mi_lista = (2, 3, 4, 5) |
Salida:
1 | Par |
Iterando sobre las llaves, los valores, y los pares clave-valor de los diccionarios
Podemos iterar, sobre las llaves, sobre los valores, y los pares clave-valor de un diccionario llamando métodos de los diccionarios.
Para iterar sobre las llaves, escribimos:
1 | for <var> in <variables_de_diccionario>: |
Solo escribimos el nombre de la variable que almacena el diccionario a iterar.
💡Anotación: Tu puedes escribir
<variable_de_diccionario.keys()>
pero escribir el nombre de la variable directamente es mas conciso y funciona exactamente igual.
Por ejemplo:
1 | mi_dicc = {"a": 1, "b": 2, "c": 3} |
1 | a |
💡Anotación: Puedes asignar cualquier nombre válido a la variable del ciclo.
Para iterar sobre valores, usamos:
1 | for <var> in <variable_de_diccionario>.values(): |
Por ejemplo:
1 | mi_dicc = {"a": 1, "b":2, "c": 3} |
Salida:
1 | 1 |
Para iterar sobre pares clave-valor, usamos:
1 | for <var>, <valor> in <variable_de_diccionario>.items(): |
💡Anotación: Definimos dos variables de ciclo porque queremos asignarle la clave y el valor para poder usarlas en el ciclo.
1 | mi_dicc = {"a": 1, "b":2, "c": 3} |
Salida:
1 | a 1 |
Si definimos solo una variable del ciclo, esta variable contendrá una tupla con el par de clave-valor:
1 | mi_dicc = {"a": 1, "b":2, "c": 3} |
Salida:
1 | ('a', 1) |
Breack y Continue en Python
Ahora sabes como iterar sobre secuencias en Python. Ahora veremos como tener control sobre el ciclo usando: break
y continue
.
Declaración Break
La declaración breack
es usada para parar el ciclo inmediatamente.
Cuando una declaración breack
es encontrada, el ciclo para y el programa retoma su funcionamiento normal después del ciclo.
En el siguiente ejemplo, vamos a parar el ciclo cuando un elemento par es encontrado.
1 | mi_lista = [1, 2, 3, 4, 5] |
Salida:
1 | Impar 1 |
Declaración Continue
La declaración continue
es usada para saldar el resto de la iteración actual.
Cuando se encuentra en la ejecución del ciclo, la iteración actual para y una nueva empieza con los valores actualizados en la variable del ciclo.
En el siguiente ejemplo, saltaremos la iteración actual si el elemento es par y mostraremos el valor si el elemento es impar:
1 | mi_lista = [1, 2, 3, 4, 5] |
Salida:
1 | Impar: 1 |
Función zip() en Python
zip()
es una sorprendente función incorporada que nos ofrece Python para iterar sobre múltiples secuencias de una vez, obteniendo sus correspondientes elementos en cada iteración.
Por ejemplo:
1 | mi_lista1 = [1, 2, 3, 4] |
Salida:
1 | 1 5 |
Función enumerate() en Python
Puedes mantener localizado un contador mientras el ciclo se está ejecutando con la función enumerate()
. Comúnmente usado para iterar sobre una secuencia y obtener el correspondiente índice.
💡Anotación: Por defecto el contador inicia en
0
.
Por ejemplo:
1 | mi_lista = [5, 6, 7, 8] |
Salida:
1 | 0 5 |
1 | palabra = "Hola" |
Salida:
1 | 0 H |
Si inicias el contador desde 0
, puedes usar el índice y el valor actual en la misma iteración para modificar la secuencia:
1 | mi_lista = [5, 6, 7, 8] |
Salida:
1 | [15, 18, 21, 24] |
Puedes iniciar el contador con un número diferente pasando un segundo argumento al la función enumerate()
:
1 | palabra = "Hola" |
Salida:
1 | 2 H |
La cláusula else
Los ciclos también tienen una cláusula else
. Puedes añadir esta cláusula al ciclo si quieres ejecutar un bloque de código específico cuando el ciclo complete todas sus iteraciones sin encontrar una declaración break
.
💡Anotación: Si la declaración
break
es encontrado, la cláusulaelse
no se va a ejecutar y si la declaraciónbreak
no es encontrado la cláusulaelse
sera ejecutada.
1 | mi_lista = [1, 2, 3, 4, 5] |
Salida:
1 | No encontrado |
Sin embargo, si la declaración break
se ejecuta, la cláusula else
no se ejecuta. Podemos ver esto en el siguiente ejemplo:
1 | mi_lista = [1, 2, 3, 4, 5] # Ahora la lista tiene el valor 8 |
Salida:
1 | Encontrado |
Este es un artículo al cual regresar constante mente mientras interiorizas estos nuevos conceptos, añádelo a tus marcadores, te invito a que abras tu editor de código favorito y practiques, no te olvides de comentar y compartir, nos vemos en otro artículo.