viernes, 29 de octubre de 2010

Colecciones Python

Oficialmente, desvelo mi variación, desde C a Python. He de confesar que me ha gustado este lenguaje; Sintaxis intuitiva y fácil de comprender, potente, y bajo mi punto de vista, bonito a la hora de ser escrito. Esto no quiere decir que abandone C/C++, ni mucho menos. Intentaré, a la hora de poner ejemplos de programas y/o algoritmos, implementarlo tanto en Python como en C/C++. También pido a los experimentados en este mundillo que me corrijan en mis errores de novato. Dicho esto, en esta primera entrada dedicada exclusivamente a Python, voy a hablar de los 3 tipos básicos de colecciones que tiene: Listas, Tuplas y Diccionarios.

Listas

A modo de comparación, podríamos decir que una lista es el equivalente a un array en C.  Pero a diferencia de un array típico en C, en Python, las listas pueden incluir cualquier tipo de dato.

Declaración: Como ya dije, es bastante sencillo e intuitivo. Veamos un ejemplo.
lista = [1,2,3,4,5]
Como vemos, asignamos el nombre de la lista y ponemos los datos entre paréntesis. En este caso he incluido números enteros, pero podemos "mezclar" mas tipos de datos:
lista = [1,"Hola",3,"mundo",5]
Ahora, he intercalado enteros con cadenas de caracteres. Llegados a este punto, lo mas típico es recorrer nuestra lista para interactuar con los elementos. A los que vengan de C/C++ como yo, les va a gustar esto. En python, el tipo de bucle for es usado para iterar sobre elementos de una colección, en este caso, de una lista. Me gusta resumir esto con una frase: "For element in List". La sintaxis es bastante clara, podré el ejemplo:
    lista = [1,"Hola",3,"mundo",5]
    for elemento in lista:
        print elemento
elemento actúa en este caso como la posición dentro del "Array". Por lo cual, podríamos decir "Para lista[elemento] en lista: ". A cada pasada del bucle for, se incrementará. Por lo cual, la salida por pantalla de este código será:
1
Hola
3
Mundo
5
Como vengo repitiendo, bastante intuitivo. Podemos también cambiar el valor de los elementos dentro de la lista, accediendo a través de su posición.
lista[2] = 10
Como curiosidad, podemos acceder a la inversa a la Lista (Otra novedad, para los que venimos del mundo C) la posición -1 equivale a la última posición de la lista: Por lo tanto, si escribimos print lista[-1] imprimiremos el último elemento de la lista (5). Con -2, el penúltimo (Mundo), etc.

Otra novedad, para los noveles, es la técnica Slicing. En vez de seleccionar solo un dato, podemos seleccionar una "porción" con varios datos a la vez. Esto lo hacemos indicando el Principio y el Fin de la "Porción". También, opcionalmente, podemos seleccionar el número de saltos que queremos dar. Veamos un ejemplo:
    lista2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print lista2[0:5]
Como vemos, imprimimos desde la posición 0 a la 5 de lista2. La opción con saltos, sería:
print lista2[2:9:3]
Con lo que imprimimos los elementos del 2 al 9 con saltos de 3 elementos (En lista2, imprimiremos [3, 6, 9]). Evidentemente si omitimos alguno de los elementos Inicio/Final, se usará el principio de la lista y el final de la lista.


Tuplas

Llegamos a una nueva forma de colección de datos. Al contrario que las listas, las tuplas son inmutables: No varían el tamaño ni pueden ser modificadas una vez creadas. Se usan prácticamente igual que una lista, excepto por la declaración, pues en vez de corchetes se usan paréntesis.
    tupla = (1,2,3)
    for elemento in tupla:
        print elemento
Se accede a los elementos igual que en una lista, refiriéndonos a los mismos entre corchetes. Pongo un ejemplo de acceso a un elemento de una tupla, con Slicing.
    mivar = tupla[-1:]

Diccionarios
 
Y llegamos por fin a la parte que mas me gusta de este capítulo, los Diccionarios. Son colecciones de datos que contienen una clave y un valor.
    dic = { "Dato A" : "Sergio", "Dato B" : "Carmen", "Dato C" : "Isaac"}
Se puede diferenciar el modelo Clave:Valor. Las claves deben ser valores inmutables (Como cadenas, números, tuplas, etc). 
Esto es así porque accedemos a los elementos a través de la clave y no de la posición (Osea, lo hacemos como si fuera una tabla hash).

Vamos a acceder ahora a nuestros valores. Para ello, debemos acceder desde la clave.
    print dic["Dato A"]
Esto mostrará la clave asociada "Sergio".

Para finalizar, os dejo un enlace con el código de ejemplo de todo lo explicado aquí arriba. [Click]

3 comentarios:

  1. :| saltar de C a esto... ¡que pasada!

    ResponderEliminar
  2. Tambien, lo interesante de las listas es que se pueden hacer listas de listas, por ejemplo cuando quieres hacer una lista de nombres de alumnos, y sus notas, seria algo asi:

    Serch = ["Serch", 9,10]
    Rock = ["Rock", 10,9]
    alumnos = [Serch, Rock]

    for i in alumnos:
    for j in alumnos[i]:
    if j == 0:
    print "alumno:", alumno[i][0]
    else:
    print "Nota:", alumno[i][j]

    Luego, todo esto es muuuucho mas simple con los registros, pero eso lo explicare cuando sea colaborador, que tiene muuucha telita ;)

    ResponderEliminar