Tipos de datos complejos en Python
En el lenguaje de programación Python, además de los tipos de datos que se han visto en artículos anteriores, existen tres tipos de datos más complejos, que permiten utilizar lo que se suele denominar una colección de datos.
Estos tres tipos se caracterizan por permitir almacenar colecciones de datos de diferentes tipos, también por la sintaxis y por la forma en la que permiten manipular los datos, siendo los tipos los siguientes:
- Tuplas
- Listas
- Diccionarios
Tuplas
Una tupla es una variable que permite almacenar varios datos y estos pueden ser de tipos diferentes, se ha de indicar que los datos que se almacenan en la misma son inmutables, es decir no pueden ser modificados una vez que se hayan creado.
la representación de una tupla es la lista de valores de la misma separadas por comas y encerrados todos los valores entre paréntesis. Aunque no es necesario escribir los paréntesis al declarar la tupla, simplemente se han de utilizar las comas, aunque Python siempre utiliza los paréntesis para su representación, un ejemplo puede ser el siguiente.
( 1 , «Hola», 1.45 , «Mundo» )
Para crear una tupla se puede utilizar el siguiente formato:
nombre_variable = ( valor, valor, valor, …)
Hay quien describe las tuplas como secuencias de valores, un ejemplo puede ser una fecha, la cual tiene una secuencia de valores dia, mes y año. Un detalle a tener en cuenta es que una tupla puede contener como valor otra tupla. Los siguientes ejemplos muestran lo que se esta comentado.
fecha_nacimiento = ( 10, "Marzo", 1969 )
fechas_curso = ( (1,"Enero",2020), (31,"Marzo",2020))
Al igual que ocurre con las matrices en otros lenguajes, al definir una tupla si se quiere acceder a los elementos de la misma individualmente, estos tienen un valor de indice asociado, comenzando el indice por un valor 0, es decir para acceder al segundo elemento de la tupla se habria de indicar un valor 1. Si una tupla contiene como valores tuplas el acceso a los elementos individuales de la misma se haria indicando en primer lugar el indice del valor de tupla al cual se quiere acceder, seguido del indice correspondiente del valor al que se quiere acceder del elemento leido. El siguiente ejemplo muestra el resultado de lo comentado.
# Definición de tupla
fecha_nacimiento = (10,"Marzo",1969)
fechas_curso = ((1,"Enero",2020), (31,"Marzo",2020))
# Visualización de elementos de la tupla
print("Fecha nacimiento: ",fecha_nacimiento)
print("Dia: ",fecha_nacimiento[0])
print("Mes: ",fecha_nacimiento[1])
print("Año: ",fecha_nacimiento[2])
print("Mes Inicio Curso: ", fechas_curso[0][1])
print("Mes Final Curso: ", fechas_curso[1][1])
El resultado al ejecutar en el terminal el programa anterior ha de ser similar al siguiente.
Aparte de poder acceder a elementos individuales de la tupla, tambien es posible acceder a porciones de la misma, es decir se puede indicar que se quiere acceder desde el primer elemento hasta el tercero, u otro intervalo diferente. Este intervalo se puede representar de la siguiente forma.
Si se quiere especificar inicio y fin de la porción de la tupla a la cual se quiere acceder se ha de indicar el indice de inicio seguido del símbolo dos puntos, finalizando con el valor del indice final. Si se quiere acceder desde el principio de la tupla, hasta un elemento concreto se ha de indicar el símbolo de dos puntos, seguido del valor al cual se quiere acceder y por ultimo si se quiere acceder desde un elemento concreto hasta el final de la tupla se ha de especificar el valor del indice de inicio, seguido del símbolo de dos puntos. El siguiente ejemplo muestra estas acciones.
# Definición de tupla
fecha_nacimiento = (10,"Marzo",1969)
fechas_curso = ((1,"Enero",2020), (31,"Marzo",2020))
textos = ("Mundo","Hola","Python","Programación")
# Visualización de elementos de la tupla
print("Ver Mes y Año de nacimiento", fecha_nacimiento[1:])
print("Mensaje: ",textos[1:3])
print("Dia y mes de inicio: ",fechas_curso[0][:2])
El resultado en el terminal ha de ser similar al siguiente.
También es posible acceder de forma inversa a los elementos de la tupla para realizar esta acción se ha de utilizar los valores de los indices en negativo y teniendo en cuenta que si se quiere visualizar el ultimo elemento este tendría el valor -1 y no -0.
No hemos de olvidar que las tuplas son inmutables y no se puede modificar su valor una vez creadas las mismas, en caso de intentarlo se produce un error como se muestra a continuación con el siguiente ejemplo.
# Definición de tupla
fecha_nacimiento = (10,"Marzo",1969)
fechas_curso = ((1,"Enero",2020), (31,"Marzo",2020))
textos = ("Mundo","Hola","Python","Programación")
# Modificación Tupla Error
fecha_nacimiento[1] = "Abril"
El resultado es el siguiente.
Empaquetado y desempaquetado de tuplas
Si a una variable se le asignan varios valores de otras variables separados por comas, la primera convierte su valor en una tupla, a esta operación se le denomina empaquetado. El siguiente ejemplo muestra esta acción.
# Variables independientes
dia = 10
mes = "Marzo"
anyo = 1969
# Empaquetado de tupla
nueva_tupla = dia, mes, anyo
# Visualizacion datos
print(nueva_tupla)
El resultado al ejecutar el programa en el terminal ha de ser similar al siguiente.
Por otra parte se pueden asignar los valores de una tupla a variables distintas en la misma asignación, a este proceso se le conoce como desempaquetado de tuplas. El siguiente ejemplo muestra esta acción.
# Variables independientes
dia = 10
mes = "Marzo"
anyo = 1969
# Empaquetado de tupla
nueva_tupla = dia, mes, anyo
# Desempaquetado de tupla
nuevo_dia, nuevo_mes, nuevo_anyo = nueva_tupla
# Visualizacion datos
print(nuevo_dia)
print(nuevo_mes)
print(nuevo_anyo)
El resultado del ejercicio anterior en el terminal ha de ser similar a la imagen que se muestra a continuación.
Listas
Una lista es muy similar a una tupla, pero con la gran diferencia de que sus valores se pueden modificar, es decir son mutables. A diferencia de las tuplas, para definir una lista se realiza esta acción especificando los valores de la lista entre los símbolos de corchete, mientras que las tuplas utilizan los paréntesis.
La notación para crear una lista es una secuencia de valores encerrados entre corchetes y separados por comas. Los siguientes son ejemplos de creación de listas.
[ 1 , «Hola», 1.45 , «Mundo» ]
Para crear una lista se puede utilizar el siguiente formato o notación:
nombre_variable = [ valor, valor, valor, …]
Al igual que en el tipo de datos anterior una lista puede contener como valor otra lista. Los siguientes ejemplos muestran lo que se esta comentado.
fecha_nacimiento = [10, "Marzo", 1969 ]
fechas_curso = [[1,"Enero",2020], [31,"Marzo",2020]]
Al definir una lista y se quiere acceder a los elementos de la misma individualmente, estos tienen un valor de indice asociado, comenzando el indice por un valor 0, es decir para acceder al segundo elemento de la lista se habría de indicar un valor 1. Si una lista contiene como valores listas el acceso a los elementos individuales de la misma se haría indicando en primer lugar el indice del valor de lista al cual se quiere acceder, seguido del indice correspondiente del valor al que se quiere acceder del elemento leído. El siguiente ejemplo muestra el resultado de lo comentado.
# Creación de listas
fecha_nacimiento = [10, "Marzo", 1969 ]
fechas_curso = [[1,"Enero",2020], [31,"Marzo",2020]]
# Visualización de elementos de la lista
print(fecha_nacimiento)
print("Dia :",fecha_nacimiento[0])
print("Mes :",fecha_nacimiento[1])
print("Año :",fecha_nacimiento[2])
print("Inicio Curso Día: ",fechas_curso[0][0])
El resultado de la práctica anterior en el terminal ha de ser similar al que se muestra a continuación.
A los valores de la lista se accede al igual que con las tuplas mediante su indice, se ha de recordar que los indices empiezan en un valor 0. Para acceder a un elemento individual se ha de especificar entre corchetes el valor del indice del elemento al que se quiere acceder, a diferencia de las tuplas, en las listas se puede asignar valores nuevos, es decir se puede modificar los valores de la lista.
La siguiente notación accedería y visualizaría el elemento numero dos de la lista.
print(fecha_nacimiento[1])
Se puede acceder también a los elementos mediante la notación de rangos. Por ejemplo para acceder al segundo elemento de la lista, se habria de especificar con la siguiente notación.
print(fecha_nacimiento[1:2])
Para obtener el segundo y tercer elemento de la lista se ha de especificar con el siguiente formato.
print(fecha_nacimiento[1:3])
Para obtener la lista que incluye al primer y segundo elemento se ha de especificar con el siguiente formato.
print(fecha_nacimiento[:2])
Aunque no se ha comentado anteriormente, se puede saber el numero de elementos que tiene una lista y también una tupla, utilizando una función denominada len, la cual se utiliza siguiendo el siguiente formato.
print(len(fecha_nacimiento))
Por otra parte si se quiere modificar el contenido de una lista y en concreto una posición, se ha de especificar el nombre de la lista y su posición de indice, asignando el valor que se desea aplicar. El siguiente ejemplo modifica el valor numero dos de la lista.
fecha_nacimiento[1] = «Septiembre»
Cuando se quiere agregar un nuevo valor a la lista se ha de utilizar el comando append, el ejemplo siguiente muestra como se agrega un nuevo valor.
variable_de_lista.append(Valor)
El siguiente ejemplo muestra el uso de las funciones len y append sobre una lista de valores numéricos.
# Creación de listas
lista_uno = [10,20,30,40]
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
# Modificación de elementos de la lista
lista_uno[1] = 200
lista_uno[3] = 400
# Inserción de elementos de la lista
lista_uno.append(600)
lista_uno.append(800)
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
El resultado del ejercicio anterior en el terminal ha de ser similar al que se muestra a continuación.
Si se desea realizar la inserción de un valor en una posición concreta de la lista, se puede realizar también esta acción para ello hemos de utilizar un comando denominado insert, el cual utiliza la siguiente sintaxis.
nombre_lista.insert( posición_indice , valor_a_insertar )
El siguiente ejemplo muestra el uso de append e insert aplicados a una lista.
# Creación de listas
lista_uno = [10,20,30,40]
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
# Modificación de elementos de la lista
lista_uno[1] = 200
lista_uno[3] = 400
# Inserción de elementos al final de la lista
lista_uno.append(600)
lista_uno.append(800)
# Inserción de elementos en posiciones concretas de la lista
lista_uno.insert(1,1000)
lista_uno.insert(3,2000)
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
Una vez ejecutado el programa en el terminal, ha de presentar un resultado similar al que se muestra a continuación.
También es posible eliminar elementos de la lista, para realizar esta acción se puede utilizar el comando remove, el cual borra el elemento que se indique, aunque si se encontrasen valores repetidos en la lista, se borra solo el primer elemento encontrado, al comando se le ha de indicar el valor que se quiere eliminar. la sintaxis del comando es la siguiente.
nombre_de_lista.remove( valor_a_eliminar )
Aunque este comando es muy cómodo ya que permite especificar el valor que se desea borrar, si el valor especificado a borrar no se encuentra en la lista, produce una salida de error, esta se puede evitar, pero de este asunto hablaremos en futuras prácticas.
Hay muchos más ordenes que se pueden utilizar con las listas, que iremos viendo poco a poco y con explicaciones en futuros artículos, en este primero no quiero sobrecargar de información la explicación de los datos complejos.
El siguiente ejemplo muestra el borrado de un elemento de la lista que existe y otro que no existe de esta forma se puede comprobar el error que devuelve el programa.
# Creación de listas
lista_uno = [10,20,30,40]
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
# Modificación de elementos de la lista
lista_uno[1] = 200
lista_uno[3] = 400
# Inserción de elementos al final de la lista
lista_uno.append(600)
lista_uno.append(800)
# Inserción de elementos en posiciones concretas de la lista
lista_uno.insert(1,1000)
lista_uno.insert(3,2000)
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
# Eliminación de un elemento por valor de la lista
lista_uno.remove(1000)
# Visualización del numero de elementos de la lista y la lista
print("No. de Elementos: ",len(lista_uno))
print("Lista = ",lista_uno)
# Eliminación de un elemento inexistente en la lista
lista_uno.remove(9000)
El resultado en el terminal del programa anterior ha de ser similar al resultado que se muestra a continuación de la práctica en Python.
Diccionarios
Otro de los tipos de datos complejos que utiliza Python, tienen gran importancia ya que el propio Python los utiliza para almacenar información y realizar operaciones con otras estructuras de datos. La diferencia principal con las listas y tuplas, es que a las anteriores se accede a sus elementos por medio de un valor de indice, mientras que en los diccionarios se permite acceder por lo que se denomina una clave que se puede definir por nosotros para declarar y acceder a un valor.
La definición puede ser que un diccionario es una colección de valores no ordenados, a los cuales se puede acceder mediante una clave, pudiendo ser esta ultima de diversos tipos.
Al definir una clave sobre un diccionario esta es única, es decir no se puede definir dos veces la misma clave, si se asigna un valor a una clave que ya existe, se esta reemplazando el valor anterior.
Un mismo valor puede ser asignado a distintas claves y no es posible acceder a una clave mediante su valor asignado.
La información guardada en diccionarios, no tiene un orden particular. Ni por clave ni por valor, ni tampoco por el orden en que han sido insertados en el diccionario.
Cualquier variable de tipo inmutable, puede ser clave de un diccionario: cadenas, enteros, tuplas (con valores inmutables en sus elementos), etc. No hay restricciones para los valores que el diccionario puede contener, cualquier tipo puede ser el valor: listas, cadenas, tuplas, otros diccionarios, objetos, etc.
En otros lenguajes de programación a este tipo de dato complejo, por ejemplo en php, se denomina matrices asociativas.
Para definir un diccionario al igual que con los datos complejos anteriores, en el primero se utilizan paréntesis, en el segundo corchetes y en los diccionarios se utilizan llaves. la sintaxis puede ser la siguiente.
nombre_diccionario = { ‘clave’: valor, ‘clave’: valor, … }
El siguiente ejemplo muestra la creación y visualización de elementos en un diccionario.
# Creación de un diccionario
punto_plano = {'x': 100, 'y': 200}
# Creación de un diccionario vacio
asignaturas = {}
# Asignación de tuplas al diccionario vacio
# especificando la clave para cada valor
asignaturas['lunes'] = ['Mates', 'Fisica']
asignaturas['martes'] = ['Lengua', 'Mates']
asignaturas['miercoles'] = ['Fisica', 'Descanso']
# Visualización del diccionario
print(punto_plano)
# Visualización de elementos por clave del diccionario
print("Valor X del punto: ",punto_plano['x'])
print("Valor Y del punto: ",punto_plano['y'])
# visualización de diccionario
print(asignaturas)
# visualización de elementos de diccionario
print("Asignaturas Lunes: ",asignaturas['lunes'])
print("1a. Asignatura Lunes: ",asignaturas['lunes'][0])
print("2a. Asignatura Miercoles: ",asignaturas['lunes'][1])
El resultado de la ejecución del ejercicio o práctica anterior ha de ser similar a la imagen que se muestra a continuación.
Bueno, de momento hasta aqui la explicación de datos complejos que se pueden utilizar en Python, como he comentado anteriormente, iremos realizando ejercicios y prácticas para avanzar con estos tipos de datos, viendo de esta forma los comandos u ordenes asociados a los mismos.
Un saludo y espero veros de nuevo por este vuestro blog www.aprendoencasa.com