Ciclos
Un ciclo es una forma de evitar repetir código muchas veces
razas = ["bulldog", "chihuahua", "beagle", "golden", "labrador", "pug"]>>> print(razas[0])
bulldog
>>> print(razas[1])
chihuahua
>>> print(razas[2])
beagle
>>> print(razas[3])
golden
>>> print(razas[4])
labrador
>>> print(razas[5])
pugComo ves en el ejemplo anterior, para poder imprimir cada elemento de la lista, tuvimos que hacer un print por cada uno de ellos. Esto no es eficiente, ¿que tal si tenemos una lista de 1.000 o 10.000 elementos y debemos imprimirlos todos? Sería un problema.
Ciclo for
forUn ciclo for nos permite correr una acción en cada uno de los ítems de la lista. Usar cada uno de los elementos de la lista se llama iterar. La sintaxis en Python de un ciclo for es la siguiente:
for <variable temporal> in <lista>:
<acción>Nota cuando usamos código explicativo del tipo <variable temporal> nos estamos refiriendo a "pseudo-código".
Revisemos cada uno de estos bloques constructores del ciclo for:
: puede ser llamada como quiera y no tiene que estar definida con anticipación.
: es la lista sobre la cual queremos iterar
<acción>: es la acción que queremos ejecutar sobre cada elemento de la lista, según nuestro anterior ejemplo, sería un
pint(). Esa es la acción
Volvamos a realizar el mismo ejercicio, pero usando el ciclo for
resultado
Con solo dos líneas de código imprimos todos los ítems de una lista, sin importar su tamaño. Ahora, ¿qué pasa si cambiamos el nombre de la variable temporal i por raza?
Sigue funcionando sin problemas, y dando el mismo resultado. Una buena práctica aquí es llamar las listas en plural y la variable temporal en singular. Sin embargo encontrás multiples ejemplos donde la variable temporal es llamada i o j, pero recuerda que esto no influye en el resultado final.
Todo lo que esté al mismo nivel de indentación después de la declaración del ciclo for estará incluido dentro del ciclo y corre en cada iteración. Si olvidamos indentar, obtendremos un IndentationError
Usando Range con Ciclos
Range con CiclosAnteriormente iteramos sobre una lista existente, pero algunas veces no queremos iterar sobre una lista específica, solo queremos ejecutar una acción cierta cantidad de veces, para ello podemos iterar sobre un tipo de dato range, que ya vimos anteriormente. La sintaxis es la siguiente:
Veamos un ejemplo real:
Resultado
Ciclos infinitos
Hemos iterado sobre listas que tienen un inicio y un final, pero ¿qué pasaría con este código?
¡Pruébalo en tu máquina a ver que sucede!
Respuesta: el computador se queda atorado, ya que ha entrado en un ciclo infinito, pero ¿por qué? Si revisas el código en detalle, te darás cuenta que dentro del ciclo for estamos añadiendo el valor 1 a la lista de forma infinita, por tanto el ciclo nunca termina. Debes oprimir las teclas CTRL + C para poder parar la ejecución, y así seguir adelante.
break
breakEn algún momento vamos a querer buscar un item dentro de una lista
Resultado
¿Qué ves de raro en este código? En el código anterior, el programa va por cada ítem dentro de la lista razas y busca usando una sentencia if a beagle. Una vez lo encuentra no hay necesidad de seguir recorriendo la lista. En este caso son 6 razas (o items), pero si necesitamos ir sobre 1 millón de items tendremos un problema de rendimiento. Se puede salir del código una vez encuentra el ítem con la sentencia break
Resultado
continue
continueOtro caso de uso similar se da cuando estamos iterando sobre una lista, pero podríamos querer saltarnos algunos valores o ítems. Podemos usar continue para movernos al siguiente i de la lista
Resultado
Como puedes ver, cuando la sentencia if encuentra un valor menor a 0 se lo "salta" con un continue y sigue recorriendo la lista.
Ciclos for "encadenados"
for "encadenados"¿Qué pasa si tenemos una lista que contiene múltiples listas, como hacemos para iterar sobre ella? Para esto usamos un for "encadenado" de la siguiente manera
Resultado
Como vemos, tenemos dos ciclos for "encadenados", uno dentro del otro, ya que la lista tiene más dimensiones. Algo importante para resaltar en el ciclo for interno, es que iteramos sobre equipo, ya que son las listas internas.
Ciclo while
whileEl ciclo while es otro tipo de ciclo diferente al ciclo for. Este ciclo recorre un set de código hasta que deja de cumplirse una condición. Puede usarse también para iterar sobre una lista. Cada vez que una condición se cumple el código dentro del ciclo corre. Es una excelente opción para cuando no sabemos cuántas iteraciones tomará para cumplir con la condición.
Para ver las diferencia con respecto al ciclo for tratemos de imprimir los ítems de la lista de razas usando el ciclo while
Resultado
¿Qué diferencias logras descifrar en comparación con el ciclo for? Empecemos:
Estamos iniciando una variable en
0, la variableindice. Esto es necesario para poder tener un valor de comparación inicial.Usamos la palabra reservada
whileseguido de un condicional que puede evaluar aTrueoFalse.El condicional compara el valor de
indicecon respecto al largo de la listarazas. En la primera iteraciónindice == 0y ellen(razas) == 6. Debido a que el resultado del condicional esTrueen la primera iteración, el código entra a ejecutar elprint(razas[indice])El
print(razas[indice])esta accediendo a la listarazasy llamando el item por la posición que tiene la variableindice, que en la primera iteración será0, o sea que llamamos al primer item:print(razas[0])La operación
indice += 1es muy importante para este caso de uso, ya que si no lo hacemos quedaremos en un ciclo "infinito".El
indice += 1toma el valor actual deindicey de forma recursiva+=suma el valor de1. Quiere decir que una vez la primera iteración finaliza, la variableindicedeja de valer0y pasa a valer1, y vuelve a recorrer todo el ciclowhileEl ciclo
whiledeja de ejecutarse cuando la condiciónwhile indice < len(razas)esFalse. La pregunta es, ¿cuando esFalse? EsFalsecuando la variableindicesea igual o mayor alen(razas), o sea igual o mayor a6
Hagamos un segundo ejemplo:
Resultado
Analiza el resultado en detalle, y trata de hacer otros ejemplos adicionales por tu cuenta.
Comprensión de listas o "List Comprehensions"
Las comprensiones de listas es una forma recursiva de iterar sobre las listas y retornar una lista como resultado.
Para entenderlo fácilmente, hagamos el siguiente ciclo for pero en vez de hacer un print(), añadamos los valores que cumplen con una condición a una lista así:
Resultado
Pensemos en ello un poco:
Este ciclo
foritera sobre una lista derazas, y retorna la listabeaglescon los valores encontrados durante el ciclofory que cumplieron la condición deif raza == "beagle":Estamos haciendo este proceso en 6 líneas de código, aquí es donde las comprensiones de listas entran en ayuda.
Hagamos ahora un list comprehension para obtener el mismo resultado:
Analiza en detalle la línea beagles = [ raza for raza in razas if raza == "beagle"] ya que aquí es donde ocurre la magia. En una sola línea de código hicimos el ciclo for y la sentencia if y retornamos una lista con los valores que cumplen la condición.
Veamos otro ejemplo y desglosamos aún más la comprensión de listas. Supongamos que tenemos la siguiente lista:
Queremos una nueva lista llamada usernames que tiene todos los strings de la lista que tienen un @ como palabra inicial. Podemos hacer un ciclo for
Resultado
Hagamos el cambio a un list comprenhension
Resultado
Como vemos es el mismo resultado del ciclo for.
Este list comprehension
Toma un elemento en
palabrasAsigna ese elemento a la variable llamada
palabraVerifica si
palabra[0] == @es igual aTrue, y si sí, añadepalabraa la nueva listausernames. Si no, no pasa nada.Repite los pasos del 1-3 para todos los strings en
palabras.
Ahora queremos crear una nueva lista con el string " por favor sigueme!" añadido al final de cada username. La nueva lista la llamaremos mensajes
Resultado
Este list comprehension:
Toma un string en
usernamesAsigna ese
usernamea una variable llamadausuarioAñade
" porfavor sigueme!"ausuarioAñade esa concatenación a la nueva lista llamada
mensajesRepite el paso 1-4 para todos los strings en
usernames
Poder crear listas con valores modificados es especialmente útil cuando trabajamos con números. Supongamos que tenemos la siguiente lista
Si queremos añadir o sumar 100 a cada valor. ¿Cómo lo haríamos?
Este list comprehension:
Toma un número en
mis_votosAsigna ese número a una variable llamada
votoSuma 100 a
votoAñade esa suma a la nueva lista llamada
votos_actualizadosRepite el paso 1-4 para todos los valores en
mis_votos
Last updated