miércoles, 28 de agosto de 2019

Programación en Python - Listas, Tuplas, Diccionarios

Hola chic@s, espero que hasta los momentos les este gustando el curso de Programación en Python. En el artículo anterior se habló acerca de las variables y constantes; ellas no son particulares de Python, de hecho todos los lenguajes de programación las usan, sin embargo se pudo notar la particularidad con la que podemos usarla en python.

Hoy veremos otras estructuras de almacenamiento, tales como: Listas, Tuplas y Diccionario. Ellas nos permiten agrupar varias datos dentro de un misma estructura; por ejemplo: En una variable solo podemos guardar un dato a la vez (edad = 35), pero en un tipo de colección podríamos almacenar un listado de edades de una localidad.

Si esto te parece un poco extraño no te alarmes, ya pronto lo comprenderás. 

Listas
La lista es lo que en otros lenguajes se conocen como arrays o vectores. Lo potente de las listas en python es pueden almacenar cualquier tipo de datos: int, float, bool, e inclusive otras listas. Ahora, para crear una lista únicamente hace falta indicar, entre corchete y separados por comas, los valores que se almacenarán en ella. Veamos un ejemplo:

>>>mi_lista = [2, 'lista', 4.5, True, [9, 22]]
Fíjense que no sólo se indica un solo dato sino varios y de diferentes tipos. Bien, cada uno de esos datos tienen un posición dentro de la lista y para poder acceder es necesario indicar, entre corchete, el índice de la posición:

>>>mi_lista[0]
2
>>> mi_lista[3]
True
Notemos que con hacer mención a la lista con un índice (entre corchete) estaremos accediendo al dato en esa posición. Los índices de las listas inician en 0, por lo que si tenemos cinco valores almacenados en ella (como en este caso), para ver él último dato deberemos hacer mención al índice 4.

>>> mi_lista[4]
[9, 22]
En el caso de tener una lista dentro de otra, así como se muestra en este ejemplo, se debe utilizar dos veces el corchete: El primero para indicar la posición de la lista exterior y, el segundo, para la interior. Si queremos acceder al número 22 de la lista interna deberemos hacer:

>>> mi_lista[4][1]
22
También es posible modificar un dato usando este método. Para cambiar el dato de la posición 0 (el valor 2) haríamos:

>>> mi_lista[0] = 45
>>> mi_lista[0]
45

Una particularidad de la listas son la posibilidad de usar índices negativos y el slicing. El primer caso (índice negativos) se traduce en que el índice comienza a contar desde el final; es decir con [-1] accederíamos al último elemento de la lista, con [-2] al penúltimo y así sucesivamente...

>>> mi_lista[-1]
[9, 22]
>>> mi_lista[-3]
4.5

Con el slicing se puede acceder a porciones o rangos de elementos Si en lugar de un número escribimos dos números inicio y fin separados por dos puntos (inicio:fin) Python interpretará que queremos una lista que vaya desde la posición inicio a la posición fin , sin incluir este último. Si escribimos tres números (inicio:fin:salto) en lugar de dos, el tercero se utiliza para determinar cada cuantas posiciones añadir un elemento a la lista.


>>> mi_lista[0:3]
[45, 'lista', 4.5]
>>> mi_lista[0:4:2]
[45, 4.5] 

Las listas ofrecen mecanismos más cómodos para ser modificadas a través de las funciones de la clase correspondiente, aunque no veremos estos mecanismos hasta más adelante, después de explicar lo que son las clases, los objetos y las funciones.

Tuplas
La tuplas tienen el mismo comportamiento que las listas con dos diferencias fundamentales: 

a) Para definir sus datos no es necesario colocar los valores entre corchetes, y su separador es la coma:

>>> mi_tupla = 1,2,5.6,'tupla'
>>> mi_tupla
(1, 2, 5.6, 'tupla')
A pesar de ésto, como forma estándar, se proponen definirlos agrupando los datos entre paréntesis:

>>> mi_tupla = (1,2,5.6,'tupla')
>>> mi_tupla
(1, 2, 5.6, 'tupla')

Nótese que se obtiene el mismo resultado. Si se desea crear una tupla con un solo valor hay que colocar después de ésta, de forma obligatoria, la coma; de no ser así sería tomado como una variable y no una tupla; por ejemplo:

>>> mi_tupla = (1)
>>> type(mi_tupla)
int   # Variable
>>> mi_tupla = (1,)
>>> type(mi_tupla)
tuple  # Tupla
b) La otra diferencia es que las tuplas son inmutables, esto quiere decir que una vez creada sus valores no se pueden modificar. Intentémoslo:

>>> mi_tupla = (1,2,5.6,'tupla')
>>> mi_tupla[0] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
A cambio de estas limitaciones las tuplas son más “ligeras” que las listas, por lo que si el uso que le vamos a dar a una colección es muy básico, puedes utilizar tuplas en lugar de listas y ahorrar memoria.

De resto, todo lo demás es similar; es decir, la forma de acceder a la información, el uso de índices negativos y slicing es igual.

>>> mi_tupla[0]
1
>>> mi_tupla[0:3]
(1, 2, 5.6)
>>> mi_tupla[-1]
'tupla'

Diccionarios
Los Diccionarios es un tipo de colección que relaciona una clave con un valor, y no un índice con un dato como las dos estructuras anteriores; por ejemplo creemos un diccionario de países y sus capitales:

>>>mi_dic = {"Venezuela": "Caracas", "Colombia": "Bogotá", "Ecuador": "Quito"}

Para crear un diccionario se debe agrupar la clave-valor dentro de llaves. En este caso la clave es el nombre del país y el valor es la capital. Por ejemplo si deseamos conocer la capital de Colombia lo hacemos colocando a su clave entre corchete:

>>> mi_dic["Colombia"]
'Bogotá'

Fíjense que ya no se usan los índices para acceder al valor sino a su clave. De hecho si intentamos colocar un índice nos da error por no conseguir esa clave:

>>> mi_dic[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0
Al igual que en listas y tuplas también se puede utilizar este operador para reasignar valores.

>>> mi_dic["Colombia"] = "Cuidad de Bogotá"
>>> mi_dic["Colombia"]
'Cuidad de Bogotá'

Sin embargo en este caso no se puede utilizar slicing, entre otras cosas porque los diccionarios no son secuencias, si no mappings (mapeados, asociaciones); esto último lo veremos más adelante.

Conclusión 
Con esto concluimos este tema. En esta oportunidad no tendremos ejercicios debido que las  colecciones requieren usar otros tipos de estructuras para poder ver mejor su utilidad.

Espero hayan disfruta de éste capítulo. Nos vemos.

0 comentarios:

Publicar un comentario