Anuncios

Bienvenidos sean a este post, hoy veremos a la primera de las funciones que disponemos para crear bucles.

Anuncios

Su sintaxis mas basica es la siguiente:

for iterador in coleccion :
    <instrucciones>
Anuncios

Esta es su forma mas basica, el iterador va a ser el objeto donde almacenaremos todos los resultados obtenidos de nuestra coleccion, la coleccion puede ser cualquiera de las clases que tenemos listadas en este post o diccionarios, listas, en fin todo aquello que almacene mas de un dato, en este post ya vimos como trabajar con un bucle pero hoy nos centraremos en todas las posibilidades, veamos la primera.

Anuncios

Para trabajar con un for clasico como de cualquier lenguaje debemos usar a range, veamos primero como es la funcion range que ya usamos en otros ejemplos.

Anuncios

La funcion range nos permite crear una secuencia de numeros, podemos establecer un inicio, un final y los pasos:

range(inicio[,final][,pasos])
Anuncios
Anuncios

Cuando hablamos de un inicio, es un valor que usaremos para empezar nuestra secuencia de numeros, el final sera el ultimo numero que estableceremos como limite, y los pasos seran la cantidad de numeros que saltara de un numero a otro, por ejemplo si ponemos 2 este mostrara el numero que esta cada 2 numeros, si pones 3 sera cada 3 numeros y asi, sino informamos ninguno toma el valor 1 como predeterminado, si informamos solamente el valor de inicio, lo tomara como final y comenzara desde 0, si necesitamos establecer un inicio que no sea desde 0 debemos informar un numero de inicio y un numero final, por ultimo el numero que informamos como final nos hara salir de la funcion por lo tanto si deben contar del 1 al 5 deberan usar una funcion como esta:

range(1,6)
Anuncios

Porque comenzara desde 1 pero cuando pase el numero 5 saldra de la funcion, con todo esto explicado volvamos al for, para hacer un for deberemos usar una secuencia como la siguiente:

>>> for valor in range(5):
...     print(valor)
... 
0
1
2
3
4
>>>
Anuncios

En este caso vemos como primero informamos el iterador (valor) y utilizamos un range que contara hasta 5, despues de los dos puntos deben ir todas las instrucciones que haremos durante el bucle, en este caso simplemente imprimiremos el contenido de valor, vean como nos muestra en pantalla del 0 al 4, como les comente antes, vamos a hacer una pequeña variacion en range para mostrar como trabajan ambos:

>>> for valor in range(1,100,5) :
...     print(valor)
... 
1
6
11
16
21
26
31
36
41
46
51
56
61
66
71
76
81
86
91
96
>>>
Anuncios

Para este ejemplo le pasamos que inicie en 1 y llegue hasta 100 pero al darle unos pasos de 5, este sumara cada vuelta 5 al valor anterior, vean como salio en el listado, con esto hacemos un bucle generico para repetir una X cantidad de instrucciones como en cualquier lenguaje, pasemos al siguiente tipo de iteracion.

Anuncios

Iteracion en una secuencia

Cuando hablamos de una iteracion sobre una secuencia nos referimos a hacer un bucle sobre una secuencia de datos existentes, veamos el primer ejemplo:

>>> usuarios = ['tinchicus','darkzero','etortore']
>>> for pos in range(len(usuarios)) :
...     print(pos, usuarios[pos])
... 
0 tinchicus
1 darkzero
2 etortore
>>>
Anuncios

Primero creamos una lista de usuarios, despues por medio de un bucle for creamos un iterador llamado pos que nos servira para almacenar cada posicion, despues usamos a range pero le pasamos la cantidad de elementos que tiene usuarios por medio de len, con esto contara desde 0 hasta el ultimo elemento disponible, despues por medio de print le pasamos el valor de pos y el usuario en esa posicion para mostrarlo en pantalla, al final del mismo como lo hizo correctamente pero lo podemos hacer mas simple:

>>> for usuario in usuarios :
...     print(usuario)
... 
tinchicus
darkzero
etortore
>>>
Anuncios

Como les dije que esto pasa todos los datos de la coleccion que pasemos como atributo, en este caso el iterador (usuario) almacena el dato obtenido en cada pasada por usuarios, despues simplemente mostramos el valor que nos devolvio cada pasada pero perdimos las posiciones de cada usuario, para ello veamos esta ultima opcion:

>>> for pos, usuario in enumerate(usuarios) :
...     print(pos, usuario)
... 
0 tinchicus
1 darkzero
2 etortore
>>>
Anuncios

En este caso usamos a enumerate y nos devolvera un tuple de dos datos, la “posicion” que enumero y el valor de almacenado en usuarios, por esta razon debemos pasar dos iteradores para recibir los dos datos generados, despues mostramos los dos datos por medio de print, la funcion enumerate podemos agregar desde que posicion empezar a enumerar, para ello despues de la coleccion debemos poner una coma y el valor desde donde comenzar sino lo hara desde 0 de manera predeterminada, igualmente esto es mucho mas practico que el primer ejemplo que vimos, pasemos al siguiente tema.

Anuncios

Iterando sobre multiples secuencias

Vamos a suponer el siguiente ejemplo, tenemos no solamente los usuarios sino que ademas tendremos los apellidos de los mismos en otra secuencia, vamos a suponer que tenemos estas dos listas:

>>> usuarios = ['tinchicus','etortore','polizzia','marcuzzj']
>>> apellidos = ['Miranda','Tortore','Polizzi','Marcuzzi']
Anuncios

Con las dos listas establecidas probemos con el siguiente bucle:

>>> for pos in range(len(usuarios)) :
...     usuario = usuarios[pos]
...     apellido = apellidos[pos]
...     print(usuario, apellido)
... 
tinchicus Miranda
etortore Tortore
polizzia Polizzi
marcuzzj Marcuzzi
>>>
Anuncios

Este es un ejemplo similar al primero que vimos en el caso anterior, donde por medio de len sobre usuarios obtendremos las posiciones de cada elemento, despues tenemos dos variables a los cuales le almacenaremos los datos de cada posicion almacenada en pos con cada lista, por ultimo imprimimos esta iteracion, como podemos ver funciona correctamente pero quedo demasiado complejo, vamos a solucionarlo nuevamente con enumerate:

>>> for pos, usuario in enumerate(usuarios) :
...     apellido = apellidos[pos]
...     print(usuario, apellido)
... 
tinchicus Miranda
etortore Tortore
polizzia Polizzi
marcuzzj Marcuzzi
>>>
Anuncios

En este caso volvemos a usar enumerate con usuarios pero esta vez con los dos datos que obtuvimos no nos alcanza porque nos falta el apellido, por lo tanto debemos agregar una nueva variable llamada apellido y ahi le agregaremos el valor de la posicion de apellidos, si bien se mejoro un poco el codigo y sigue funcionando pero que pasa si ahora necesitamos agregar otro dato como pueden ser los nombres, debemos agregar otra variable mas y seguir complicandose pero podemos optimizar este codigo por medio de zip, veamos el codigo:

>>> for usuario, apellido in zip(usuarios, apellidos) :
...     print(usuario, apellido)
... 
tinchicus Miranda
etortore Tortore
polizzia Polizzi
marcuzzj Marcuzzi
>>>
Anuncios

Por medio de zip transformamos a las dos listas en una nueva lista que contendra los dos datos intercalados, en este caso creamos dos iteradores que recibiran el dato de la lista usuarios y apellidos respectivamente, despues simplemente lo mostramos y vemos que sigue funcionando pero supongamos que ahora debemos agregar los nombres de los usuarios, veamos como se puede implementar de una manera muy facil:

>>> nombres = ['Martin','Enzo','Ariel','Javier']
>>> for usuario, apellido, nombre in zip(usuarios,apellidos,nombres) :
...     print(usuario, '\t', apellido + ", " + nombre)
... 
tinchicus 	 Miranda, Martin
etortore 	 Tortore, Enzo
polizzia 	 Polizzi, Ariel
marcuzzj 	 Marcuzzi, Javier
>>
Anuncios

Agregamos la nueva lista con los nombres, luego agregamos al nuevo iterador y por ultimo agregamos en zip a la nueva lista, despues modifique un poco la forma de mostrarlo para hacerlo mas “monono”, en este caso pase un modificador de texto para generar una tabulacion (\t), despues uni el apellido con el nombre por medio de un texto que representa una coma con un espacio, como se puede ver en el resultado final.

Anuncios

En resumen, hoy hemos visto al bucle mas difundido en todos los lenguajes de programacion, este es un poco distinto a como trabaja en otros lenguajes porque es mas parecido a lo llamado al for mejorado porque no trabaja con ciclos sino que pasa por todos los elementos de una coleccion y lo almacena en un objeto iterador, si bien por range podemos hacerlo trabajar como en cualquier lenguaje para que repite un ciclo una X cantidad de veces, luego si vimos como poder trabajar primero con una sola lista y luego con varias listas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.00