Estructuras de datos

Autor: Pablo Cerrillo Ruiz.
Última modificación: 26 de junio de 2019.

Índice

0. ¿Qué es y cómo funciona Jupyter Notebooks?

Jupyter Notebook es un entorno de trabajo interactivo que permite desarrollar código de manera dinámica. Ahora mismo nos encontramos en el cuaderno UD Estructuras de datos, cuya finalidad es enseñar al alumno las diferentes estructuras de datos en Python y la utilidad que éstas tienen en el mundo de la programación.

Recuerde que para ejecutar el contenido de una celda basta con pulsar el botón Run del panel de control. También puede pulsar al mismo tiempo las teclas Mayúsculas+Enter

1. Introducción.

Una vez vistos los tipos de datos básicos del lenguaje de programación en Python (int, float, bool, complex, str ), puede ser que necesitemos realizar algún tipo de agrupación de éstos debido a lo que puedan representar en conjunto. Por ejemplo, imagine que tenemos que almacenar la temperatura de los últimos 5 días, una solución podría ser la siguiente:

In [ ]:
''' Definiendo la temperatura de los últimos 5 días con distintas varibles'''

temperatura_dia_1 = 22.3
temperatura_dia_2 = 25.2
temperatura_dia_3 = 23.8
temperatura_dia_4 = 27.9
temperatura_dia_5 = 30.0

Como vemos, hemos creado 5 variables, una por cada día, para almacenar la temperatura. Esto supone un problema debido a que si quiesieráramos almacenar la temperatura de más días, tendríamos que modificar el código y añadir más variables. Para solucionar este problema, podemos usar las estructuras de datos de Python. Las 4 estructuras de datos más utilizadas en Python son:

  • Listas.
  • Tuplas.
  • Conjuntos.
  • Diccionarios.

2. Listas.

Las listas son secuencias ordenadas de cero o más elementos. Los listas son un tipo de dato mutable, es decir, podemos modificiar, añadir o borrar elementos de la lista.

Podemos crear una lista de dos formas diferentes: mediante la función list() o mediante el uso de [ ] en la asignación a una variable. Veamos un ejemplo:

Ejemplo: Creación de listas en Python.

In [ ]:
''' Creación de listas de Python '''

# Creación de una lista vacía mediante la función list()
lista_uno = list()

# Creación de una lista vacía mediante el operador [ ]
lista_dos = [ ]

# Creación de una lista con elementos de un mismo tipo de dato mediante el operador [ ]
lista_tres = [2, 4, 7, 1, 2, 9]

# Creación de una lista 
lista_cuatro = ['Hola', 2, 5.3, True, 'Mundo']

# Podemos imprimir el contenido entero de una lista mediante la función print
print(lista_uno)
print(lista_dos)
print(lista_tres)
print(lista_cuatro)

Como hemos podido ver, las listas admiten elementos de diferentes tipos de datos.

¡PRUEBA TÚ!

Crear dos listas, una lista vacía y otra lista con el nombre de 5 asignaturas que conozcas. Imprime el contenido de las listas utilizando la función print.

In [ ]:
''' Crear dos listas en imprimir el contenido de dichas listas. '''

# Crear aquí una lista vacía
lista_vacia = 

# Crear una lista que contenga el nombre de 5 asignaturas
lista_asignaturas = 

# Imprimir aquí el contenido de las dos listas
print()
print()

2.1 Accediendo a los elementos de una lista.

Anteriormente hemos visto que podemos imprimir el contenido de toda la lista mediante la función print pero ¿Y si necesitamos obtener un elemento en concreto de la lista?. Python proporciona la posibilidad de acceder a ellos mediante el operador [ ]. A continuación, vamos a crear una lista:

In [ ]:
# Creación de una lista 
lista_ejemplo = ['Hola', 2, 5.3, True, 'Mundo']

# Podemos imprimir el contenido entero de una lista mediante la función print
print(lista_ejemplo)

En la siguiente imagen podemos ver una representación gráfica de la lista, donde se especifican los índices para acceder a los elementos de la lista creda anteriormente:

Como podemos observar, tenemos dos formas de acceder a un elemento, mediante su índice o su índice inverso. Vamos a acceder al segundo elemento de la lista creada anteriormente de las dos formas:

In [ ]:
''' Acceso al segundo elemento de la lista "lista_ejemplo" ''' 

# Creación de una lista 
lista_ejemplo = ['Hola', 2, 5.3, True, 'Mundo']

print(lista_ejemplo[1])     # accedemos al segundo elemento de la lista con su índice
print(lista_ejemplo[-4])    # accedemos al segundo elemento de la lista con su índice inverso

Podemos consultar el número de elementos de una lista mediante la función len de Python. Dicha función se puede utilizar con cualquier elemento iterable como listas, tuplas, conjuntos o cadenas de texto.

In [ ]:
len(lista_ejemplo)

Un operador fundamental en el uso de estructuras de datos es el operador in. El operador in nos indica si un elemento se encuentra o no la estructura de datos que especifiquemos.

In [ ]:
''' Acceso al segundo elemento de la lista "lista_ejemplo" ''' 

# Creación de una lista 
lista_ejemplo = ['Hola', 2, 5.3, True, 'Mundo']

print('Hola' in lista_ejemplo) # comprobamos si 'Hola' se encuentra en la lista
print( 5 in lista_ejemplo)     # comprobamos si 5 se encuentra en la lista

¡PRUEBA TÚ!

En el siguiente ejercicio vamos a crear una lista con el nombre de 5 asignaturas diferentes. Después imprimiremos aquellas que se encuentran en posición impar mediante su indice normal y las que se encuentran en una posición par con su índice inverso.

In [ ]:
''' Crea una lista que contenga los nombres de 5 comidas diferentes '''

comidas = []

# Vamos a imprimir cada uno de los elementos
print( ) # el primer elemento mediante su índice normal
print( ) # el segundo elemento mediante su índice inverso
print( ) # el tercer elemento mediante su índice normal
print( ) # el cuarto elemento mediante su índice inverso
print( ) # el quinto elemento mediante su índice normal

# Imprime el número de elementos que contiene la lista

# Comprueba si 'pizza' se encuentra en la lista comidas

2.2 La notación slice.

Es posible que tengamos la necesidad de obtener más de un elemento de una lista, es decir, una sublista. Una sublista es un conjunto de elementos más pequeño de la lista original.

Para ello, Python permite indicar dentro del operador [ ] rangos de índices. A continuación, se muestra una imagen para describir las posibles características que se ofrecen:

Donde:

  • Inicio: Es el índice de inicio desde donde se empieza a obtener la sublista.
  • Fin: Es el índice del último elemento. Cabe destacar que el último elemento incluido en la lista es el que ocupa la posición en el índice fin - 1 . Por lo tanto, el que ocupa la posición fin no entrará en la sublista.

Veamos un ejemplo:

In [ ]:
''' Obteniendo diferentes sublistas a partir de una lista '''

deportes = ["Fútbol", "Baloncesto", "Tenis", "Bádminton", "Balonmano", "Padel", "Rugby"] # lista original

# imprimimos la lista original
print("\n Lista original ", deportes)

# imprimimos los tres primeros deportes
print("\n Los tres primeros deportes de la lista son ", deportes[0:3])
print(" Los tres primeros deportes de la lista son ", deportes[-7:-4])  # En este caso, utilizamos los índices inversos

# imprimimos los tres últimos deportes
print("\n Los tres últimos deportes de la lista son ", deportes[4:7])

# obtenemos la lista vacía si especificamos rangos cuyo valor final sea menor o igual que el inicial
print("\n Obtenemos la lista vacía ", deportes[7:-4])
print(" Obtenemos la lista vacía ", deportes[1:1])

¡CUIDADO! ya que si se nos olvida especificar el índice de inicio, Python da por sentado que estamos especificando el primer índice (0). Lo mismo ocurre con el índice final, si no se especifica, Python lo establece como el índice final de la lista.

In [ ]:
''' Obteniendo diferentes sublistas a partir de una lista '''

deportes = ["Fútbol", "Baloncesto", "Tenis", "Bádminton", "Balonmano", "Padel", "Rugby"] # lista original

# imprimimos la lista original
print("\n Lista original ", deportes)

# imprimimos los tres primeros deportes
print("\n Los tres primeros deportes de la lista son ", deportes[:3])

# imprimimos los tres últimos deportes
print("\n Los tres últimos deportes de la lista son ", deportes[4:])

# Si no especificamos nada, nos devolverá la lista original
print("\n Obtenemos la lista original ", deportes[:])

Como podemos observar, una vez especificados el índice inicial y el final, vamos incrementado el valor inicial hasta quedarnos en el índice fin - 1, pero ¿Y si queremos recorrer la lista al revés o hacer que el índice incremente de otra forma?. Entonces deberíamos indicar el incremento en la notación slice de la siguiente forma:

Donde:

  • Inicio: Es el índice de inicio desde donde se empieza a obtener la sublista.
  • Fin: Es el índice del último elemento. Cabe destacar que el último elemento incluido en la lista es el que ocupa la posición en el índice fin - 1 . Por lo tanto, el que ocupa la posición fin no entrará en la sublista.
  • Incremento: valor entero que indica como se irá recorriendo la lista.

Ejemplo: Obtención de sublistas mediante la notación slice.

In [ ]:
''' Obteniendo diferentes sublistas a partir de una lista '''

asignaturas = ["Historia", "Matemáticas", "Lengua", "Inglés", "Francés", "Informática"] # lista original

# imprimimos los deportes en una posición de índice impar
print("\n Las asignaturas de la lista en una posición con índice impar son ", asignaturas[1::2])

# imprimimos los deportes en una posicion de índice par
print("\n Las asignaturas de la lista en una posición con índice par son", asignaturas[::2])

De esta forma, tenemos una mayor flexibilidad para obtener sublistas, ya que nos permite incluso obtener una lista de forma inversa, realizando decrementos:

In [ ]:
''' Obteniendo diferentes sublistas a partir de una lista '''

asignaturas = ["Historia", "Matemáticas", "Lengua", "Inglés", "Francés", "Informática"] # lista original

# En esta ocasión realizaremos un decremento
print("\n Las asignaturas en una posición impar de la lista son ", asignaturas[-2:-5:-1])

¡PRUEBA TÚ!

En este ejercicio vamos a trabajar con sublistas. Para ello, se proporciona una lista, sobre la cuál se deberán obtener las sublistas que se especifican.

In [ ]:
''' Obtener las sublistas especificadas   '''

# Lista original
videojuegos = ['Batman: Arkham City', 'Pokémon', 'Phoenix Wright', 'Mario Kart', 'FIFA 19', 'Metal Gear V', 'Brain Training']

# Nº1 Sublista que contenga los videojuegos en un índice de posición par
print("\n La sublista nº1 es: ",  )

# Nº2 Sublista que contenga los videojuegos en un índice de posición par
print("\n La sublista nº2 es: ",  )

# Nº3 Sublista que contenga los videojuegos en un índice de posición par
print("\n La sublista nº3 es: ",  )

# Nº4 Sublista que los dos primeros elementos y los dos últimos
print("\n La sublista nº4 es: ",  )

# Nº5 Sublista que contenga los videojuegos en un índice de posición impar
print("\n La sublista nº5 es: ",  )

# Nº6 lista inversa a la original
print("\n La lista inversa nº6 es: ",  )

# Nº7 Sublista que contenga los videojuegos con un índice impar negativo.
print("\n La sublista nº7 es: ",  )

2.3 Operaciones más comunes con listas en Python.

Llegados a este punto, ya sabemos crear listas y obtener elementos de un lista. Además de eso, Python permite modificar elementos de una lista, añadiendo nuevos elementos a la lista o eliminar elementos de la misma.

2.3.1 Modificar un elemento de la lista.

Para modificar un elemento de una lista, lo único que debemos hacer es asignar un valor a una posición indicada de la lista.

In [ ]:
''' Modificando un elemento de una lista '''

# Definimos una lista
asignaturas = ["Historia", "Matemáticas", "Lengua", "Inglés", "Francés", "Informática"]

print("\n",asignaturas)

# modificamos el primer elemento de la lista
asignaturas[0] = "Filosofía"

print("\n",asignaturas)

¡PRUEBA TÚ!

En este ejercicio vamos a cambiar un elemento de nuestra lista de la compra.

In [ ]:
''' Modificando elementos a una lista de la compra '''

# lista de la compra para realizar una tortilla de patatas
lista_compra = ['patatas', 'huevos', 'aceite de girasol', 'cebolla']

'''
   Vamos a sustituir el aceite de girasol por el aceite de oliva, 
   para ello, modificar el valor de la posición 2 de la lista
'''


print() # imprimimos la lista de la compra 

2.3.2 Añadir elementos a una lista.

Python proporciona los siguientes métodos para insertar elementos en una lista:

Método Descripción
append(X) Añade el elemento X al final de la lista.
insert(i,X) Añade el elemento X en la posición i de la lista.

Ejemplo: Añadir elementos a una lista creada.

In [ ]:
''' Añadiendo elementos a una lista '''

# Creamos una lista
objetos_mochila = ['portátil','cargador','libreta']

# añadimos mediante el método append al final de la lista el elemento 'bolígrafo'
objetos_mochila.append('bolígrafo')

# añadimos en la posición 0, es decir al principio, elemento 'libro'
objetos_mochila.insert(0,'libro')

print(objetos_mochila) # imprimimos la lista para ver el resultado final

¡PRUEBA TÚ!

En este ejercicio vamos a utilizar las funciones para insertar elementos en una lista, para ello, se deberán añadir los elementos que se especifican a la lista que se proporciona e imprimir una vez hayamos realizado dichas inserciones.

In [ ]:
''' Añadiendo elementos a una lista de la compra '''

# lista de la compra para realizar una tortilla de patatas
lista_compra = ['patatas','huevos']

# Se me olvidó apuntar el aceite de oliva, añadirlo mediante el uso de la función append

# Un poco de cebolla no vendría mal, añade cebolla en una posición intermedia para que no se nos olvide


print() # imprimir la lista de la compra 

2.3.3 Eliminar elementos de una lista.

Python proporciona los siguientes métodos para insertar eliminar en una lista:

Método Descripción
pop() Devuelve y elimina el último elemento de la lista.
pop(i) Devuelve el elemento en la posición i-ésima, es decir lista[i], y lo elimina de la lista.
clear() Elimina todos los elementos de la lista.

Ejemplo: Eliminar elementos de una lista creada.

In [ ]:
''' Eliminar elementos de una lista '''

# Creamos una lista
objetos_mochila = ['portátil','cargador','libreta','bolígrafo','libro']


objetos_mochila.pop() # Eliminamos el último elemento de la lista
objetos_mochila.pop(1) # Eliminamos el elemento en la posición 1

print("\n",objetos_mochila) # imprimimos la lista para ver el resultado final

objetos_mochila.clear() # Eliminamos todos los elementos de la lista

print("\n",objetos_mochila) # imprimimos la lista para ver el resultado final

¡PRUEBA TÚ!

¡Vaya! Alguien ha modificado nuestra lista de la compra y ha añadido productos que no son necesarios para nuestra tortilla de patatas. Vamos a utilizar las funciones para eliminar elementos en una lista, para ello, se deberán añadir los elementos que se especifican a la lista que se proporciona e imprimir una vez hayamos realizado dichas inserciones.

In [ ]:
''' Eliminando elementos a una lista de la compra '''

# lista de la compra para realizar una tortilla de patatas
lista_compra = ['macarrones', 'patatas', 'huevos', 'aceite de oliva', 'oreo', 'cebolla', ' ketchup']

# Vamos a eliminar el último elemento de la lista, para ello, utilizaremos el metodo pop()

# Ahora utilizaremos la variante pop(i) para eliminar los elementos en la posición 1 y 4

print() # imprimimos la lista de la compra 

# Acabamos de terminar de realizar la compra, borra todos los elementos de la lista

3. Tuplas.

Las tuplas son secuencias ordenadas de cero o más elementos. La única diferencia respecto a las lista es que una tupla es inmutable. Esto implica que una vez creada la tupla, no podemos modificar su contenido.

Existen diferentes formas para crear tuplas. Las más usuales son utilizando la función tuple,mediante un conjunto de elementos separados por comas dentro de paréntesis ( ) o un conjunto de elementos separados por comas.

Ejemplo: Creación de tuplas en Python.

In [ ]:
''' Creación de tuplas de Python '''

# Creación de una tupla vacía mediante la función tuple()
tupla_uno = tuple()

# Creación de una tupla vacía mediante el operador [ ]
tupla_dos = ()

# Creación de una tupla con elementos de un mismo tipo de dato mediante el operador ()
tupla_tres = (2, 4, 7, 1, 2, 9)

# Creación de una tupla 
tupla_cuatro = ('Hola', 2, 5.3, True, 'Mundo')

# creación de una tupla 
tupla_cinco = 'Hola',3,2,5,1,'Mundo'

# Podemos imprimir el contenido entero de una lista mediante la función print
print(tupla_uno)
print(tupla_dos)
print(tupla_tres)
print(tupla_cuatro)
print(tupla_cinco)

¡Cuidado! si queremos crear una tupla utilizando paréntesis con un solo elemento, debemos añadir una coma.

In [ ]:
''' Creación de tuplas de Python '''

# Creación de una tupla vacía mediante la función list()
tupla_uno = (5,)

# Creación de una tupla vacía mediante el operador [ ]
tupla_dos = (8)

# Podemos imprimir el contenido entero de una lista mediante la función print
print(tupla_uno, "es de tipo ", type(tupla_uno))
print(tupla_dos, "es de tipo ", type(tupla_dos))

Como podemos observar, si no añadimos una coma dentro del paréntesís, al crear una tupla de un elemento, Python interpreta que se trata solamente de un número entero. He ahí la importancia de la coma.

¡PRUEBA TÚ!

En este ejercicio vamos a crear varias tuplas. Para ello completar el código que se propone a continuación:

In [ ]:
''' Completar el código para crear las tuplas que se proponen '''

# Crear una tupla vacía
tupla_vacia = 

# Crear una tupla con un elemento que contenga el nombre de tu comida favorita
comida_favorita =

# Crear una tupla que contenga los ingredientes que más te gustan en una pizza
ingredientes_favoritos =

# Imprimir las tuplas
print()
print()
print() 

3.1 Accediendo a elementos de la tupla y obteniendo subtuplas.

Al igual que ocurre con las listas, Python proporciona la posibilidad de acceder a ellos mediante el operador []. A continuación, vamos a crear una lista:

In [ ]:
mi_tupla = ('Hola', 'Mundo', 2.3, 7.3, 'Mundo')

print(mi_tupla)

En la siguiente imagen podemos ver una representación gráfica de la tupla, donde se especifican los índices para acceder a los elementos de la lista creda anteriormente:

Como podemos observar, tenemos dos formas de acceder a un elemento, mediante su índice o su índice inverso. Vamos a acceder al segundo elemento de la lista creada anteriormente de las dos formas:

In [ ]:
''' Acceso al segundo elemento de la lista "lista_ejemplo" ''' 

mi_tupla = ('Hola', 'Mundo', 2.3, 7.3, 'Mundo')

print(mi_tupla[1])     # accedemos al segundo elemento de la lista con su índice
print(mi_tupla[-4])    # accedemos al segundo elemento de la lista con su índice inverso

Podemos consultar el número de elementos de una tupla mediante la función len() de Python. Dicha función se puede utilizar con cualquier elemento iterable como listas, tuplas, conjuntos o cadenas de texto.

In [ ]:
mi_tupla = ('Hola', 'Mundo', 2.3, 7.3, 'Mundo')

len(mi_tupla) # devuelve el número de elementos de la tupla

Un operador fundamental en el uso de estructuras de datos es el operador in. El operador in nos indica si un elemento se encuentra o no la estructura de datos que especifiquemos.

In [ ]:
mi_tupla = ('Hola', 'Mundo', 2.3, 7.3, 'Mundo')

esta = 5 in mi_tupla

print(esta)

Al igual que pasaba con las listas, es posible que tengamos la necesidad de obtener más de un elemento de una tupla, es decir, una subtupla. Una subtupla es un conjunto de elementos más pequeño de la tupla original. Para ello, utilizaremos la notación slice con las tuplas de la misma forma que con las listas.

Donde:

  • Inicio: Es el índice de inicio desde donde se empieza a obtener la sublista.
  • Fin: Es el índice del último elemento. Cabe destacar que el último elemento incluido en la lista es el que ocupa la posición en el índice fin - 1 . Por lo tanto, el que ocupa la posición fin no entrará en la sublista.
  • Incremento: valor entero que indica como se irá recorriendo la lista. Si no se especifica tomará el valor por defecto 1.

Ejemplo: Obtener subtuplas a partir de una tupla.

In [ ]:
''' Obteniendo diferentes subtuplas a partir de una tupla '''

asignaturas = ("Historia", "Matemáticas", "Lengua", "Inglés", "Francés", "Informática") # Tupla original

# imprimir las asignaturas Matemáticas, Lengua e Inglés
print("\n Imprimir las asignaturas Matemáticas, Lengua e Inglés: ", asignaturas[1:4])

# imprimimos los deportes en una posición de índice impar
print("\n Las asignaturas de la tupla en una posición con índice impar son: ", asignaturas[1::2])

# imprimimos los deportes en una posicion de índice par
print("\n Las asignaturas de la tupla en una posición con índice par son: ", asignaturas[::2])

# imprimimos tupla al revés
print("\n La tupla al revés: ", asignaturas[::-1])

¡PRUEBA TÚ!

En este ejercicio vamos a utilizar la funcionalidad vista anteriormente acerca del acceso a elementos de una tupla. Para ello, completa el código siguiendo las instrucciones.

In [ ]:
''' Tuplas y notación slice '''

# tupla_original
numeros = (1,2,3,4,5,6,7,8,9,10)

# Imprimir los elementos que se encuentra en la posición 4 y -4
print( )
print( )

# Asignarle a pares los elementos pares de tupla original utilizando la notación slice
pares = 

# Asignarles a impares los elementos impares de la tupla original en orden descendente utilizando la notacion slice
impares =

# Comprueba si 5 se encuentra contenido en pares
encontrado = 
print(encontrado)

# Imprime el número de elementos que contiene pares e impares
print()
print()

4. Conjuntos.

Los conjuntos son colecciones desordenadas de cero o más elementos. Al igual que las listas, son un tipo de dato mutable. Esto implica que una vez creado el conjunto podemos modificar, añadir y eliminar elementos de nuestro conjunto. Cabe destacar que los conjuntos no admiten repeticiones.

Podemos crear un conjunto vacío con la función set o crear un conjunto que contenga elementos mediante una sucesión de elementos separados por comas dentro de los operadores { }.

Ejemplo: Creación de conjuntos en Python

In [ ]:
''' Creación de conjuntos en Python '''

a = set() # Con set() podemos crear un conjunto vacío

b = {1,2,3,4,5,6,7,8,9,10} # conjunto que contiene los números del 1 al 10

c = {"hola", 2, 3.4, True} # conjunto con diferentes tipos de datos

d = {1,7,1,7,5,2,2,6,3,3} # conjunto con repeticiones, las cuales serán eliminadas

# imprimimos los diferentes conjuntos
print(a)
print(b)
print(c)
print(d)

En este caso, no podemos crear un conjunto vacío mediante el uso de llaves { }, ya que Python lo interpreta como la creación de un diccionario.

In [ ]:
''' Creación de conjuntos en Python '''

a = set() # Con set() podemos crear un conjunto vacío

b = {} # diccionario vacío

# imprimimos el tipo de dato de cada variable
print("a es del tipo ", type(a))
print("b es del tipo ", type(b))

Al igual que con las listas y las tuplas, utilizamos el método len( ) para comprobar el número de elementos que componen el conjunto y el operador in para comprobar si un elemento pertenece al conjunto.

In [ ]:
''' Elementos de un conjunto '''

c = {"hola", 2, 3.4, True} # conjunto con diferentes tipos de datos
d = {1,7,1,7,5,2,2,6,3,3} # conjunto con repeticiones, las cuales serán eliminadas

esta = True in c   # comprobamos si el elemento True se encuentra en el conjunto
esta_dos = 8 in d  # comprobamos si el elemento 8 se encuentra en el conjunto

# imprimimos los conjuntos y el número de elementos de cada uno
print(c)
print(d)
print("El número de elementos del conjunto c es: ", len(c))
print("El número de elementos del conjunto d es: ", len(d))
print(esta)
print(esta_dos)

¡PRUEBA TÚ!

En este ejercicio vamos a utilizar las funcionalidades vistas anteriormente. Para ello, completa el código siguiendo las instrucciones.

In [ ]:
''' Creación de conjuntos '''

# Crear dos conjuntos, uno vacío y otro con 6 nombre de personas

conjunto_vacio = {}
personas = {'pepe','maría'}

# Imprimir los conjuntos creados anteriormente
print(conjunto_vacio)
print(personas)
# Imprimir el número de elementos de cada uno de los conjuntos

# Comprobar si el nombre 'Pablo' se encuentra en el conjunto personas

4.1 Añadir y eliminar elementos a un conjunto en Python.

Python proporciona los siguientes métodos para insertar y eliminar elementos en un conjunto:

Método Descripción
add(x) Añade el elemento x al conjunto si no se encuentra.
discard(x) Elimina el elemento x del conjunto.
clear() Elimina todos los elementos del conjunto.

Ejemplo: Añadiendo y elemento elementos del conjunto

In [ ]:
''' Añadiendo y eliminando elementos del conjunto '''

conjunto_asignaturas = {'Matemáticas', 'Lengua', 'Inglés'}

print("\n",conjunto_asignaturas)

# Añadimos un nuevo elemento 'Francés' 'Informática' y 'Matemáticas'
conjunto_asignaturas.add('Francés')
conjunto_asignaturas.add('Informática')
conjunto_asignaturas.add('Matemáticas')

print("\n",conjunto_asignaturas)

# Eliminamos las asignaturas 'Lengua', 'Inglés' e 'Historia'
conjunto_asignaturas.discard('Lengua')
conjunto_asignaturas.discard('Inglés')
conjunto_asignaturas.discard('Historia')

print("\n",conjunto_asignaturas)

# Eliminamos todos los elementos del conjunto
conjunto_asignaturas.clear()
print("\n",conjunto_asignaturas)

¡PRUEBA TÚ!

En este ejercicio vamos a poner en prueba los métodos para añadir y eliminar elementos de un conjunto. Para ello, completa el código del siguiente ejercicio.

In [ ]:
''' Añadiendo y eliminado elementos del conjunto '''

a = {2,4,6,7,8,10}

# Añadir al conjunto a los elementos 1,5,11

# Imprimir el conjunto

# Eliminar del conjunto los elementos 2,6,10

# Imprimir el conjunto

4.2 Operaciones más comunes con conjuntos en Python.

Python proporciona métodos y operadores para realizar operaciones con conjuntos. En este apartado veremos las tres operaciones más usadas con conjuntos: unión, intersección y diferencia.

4.2.1 Unión de conjuntos.

Sean A y B dos conjuntos, se define el conjunto A unión B como un nuevo conjunto donde tenemos todos los elementos del conjunto A junto con los elementos del conjunto B que no se encuentran en A.

En Python, utilizamos el operador | para realizar la unión de conjuntos.

Ejemplo: Unión de dos conjuntos.

In [ ]:
''' Unión de conjuntos '''

# Definimos los conjuntos
A = {'a','b','c','d','e'}
B = {'a','e','i','o','u'}

C = A | B   # calculamos la unión de los dos conjuntos

print(C) # Imprimimos el conjunto C

4.2.2 Intersección de conjuntos

Sean A y B dos conjuntos, se define el conjunto A intersección B como un nuevo conjunto donde tenemos todos los elementos del conjunto A que aparecen también en el conjunto B.

En Python, utilizamos el operador & para realizar la intersección de conjuntos.

Ejemplo: Intersección de dos conjuntos.

In [ ]:
''' Intersección de conjuntos '''

# Definimos los conjuntos
A = {'a','b','c','d','e'}
B = {'a','e','i','o','u'}

C = A & B   # calculamos la intersección de los dos conjuntos

print(C) # Imprimimos el conjunto C

4.2.3 Diferencia de conjuntos.

Sean A y B dos conjuntos, se define el conjunto A diferencia B como un nuevo conjunto donde tenemos todos los elementos del conjunto A que no aparecen en el conjunto B. Cuidado con esta operación, ya que A diferencia B es distinto a B diferencia A.

En Python, utilizamos el operador - para realizar la diferencia de conjuntos.

Ejemplo: Diferencia de dos conjuntos.

In [ ]:
''' Diferencia de conjuntos '''

# Definimos los conjuntos
A = {'a','b','c','d','e'}
B = {'a','e','i','o','u'}

C = A - B   # calculamos la diferencia de los dos conjuntos
D = B - A   # calculamos la diferencia de los dos conjuntos

print(C) # Imprimimos el conjunto C
print(D) # Imprimimos el conjunto D

¡PRUEBA TÚ!

En este ejercicio vamos a probar las operaciones de unión, intersección y diferencia de conjuntos. Para ello, se proponen dos conjuntos de números, los cuales deberá rellenar y realizar las operaciones que se indican.

In [ ]:
''' Completa el código del ejercicio '''

# Crear un conjunto que contenga los múltiplos de 2 del 0 al 10
A = {}

# Crear un conjunto que contenga los múltiplos de 3 del 0 al 10
B = {}

# Completa la sentencia para imprimir el conjunto A union B
print("\n La unión de los conjunto A y B es: ", )

# Completa la sentencia para imprimir el conjunto A union B
print("\n La intersección de los conjunto A y B es: ", )

# Completa la sentencia para imprimir el conjunto A union B
print("\n La diferencia del conjunto A respecto B es: ", )

# Completa la sentencia para imprimir el conjunto B diferencia A
print("\n La diferencia del conjunto B respecto A es: ", )

5. Diccionarios.

En Python, un diccionario es un conjunto de claves que tienen asociados diversos valores al igual que un diccionario convencional. Cada clave tendrá asociado un valor o conjunto de valores, que no tiene por que ser del mismo tipo de dato que los otros valores asociados a las claves. Cabe destacar que los diccionarios no tienen un orden establecido, ya que sus valores los obtenemos mediante la clave y no mediante la posición que ocupan.

En Python, para definir un diccionario, utilizamos llaves { } y dentro, pares de claves y valores que contendrá el diccionario. También podemos crear un diccionario mediante la función dict(). Veamos un ejemplo de uso.

Ejemplo: Creación de diccionarios.

In [ ]:
''' Definimos un diccionario donde cada clave es el año de estreno y el valor la película '''

diccionario_vacio = dict() # Creación de un diccionario vacío

diccionario_vacio_2 = {} # Creación de un diccionario vacío

peliculas = {'2013': 'Iron man 3',
             '2011': 'Thor', 
             '2016': 'Dr. Strange', 
             '2019': 'Capitana Marvel' 
            }

print(diccionario_vacio)
print(diccionario_vacio_2)
print(peliculas)

¡PRUEBA TÚ!

En este ejercicio vamos a poner en práctica las diferentes maneras de crear un diccionario. Para ello, completa el código del siguiente ejercicio.

In [ ]:
''' Creación de diccionarios '''

# Crear un diccionario vacío 

diccionario_vacio =


''' Crear un diccionario que contenga las claves y valores 
        'C1' tendrá asociado el valor 5
        'C2' tendrá asociado la cadena 'Hola'
        'C3' tendrá asociado la cadena 'Mundo'
        'C4' tendrá asociado la lista [1,2,3,4,5,6,7,8,9,10]   
'''

diccionario = {

}

5.1 Operaciones más comunes con diccionarios en Python.

Python proporciona métodos para gestionar de forma sencilla nuestros diccionarios. A continuación se muestran los métodos más utilizados para la gestión de diccionarios:

Método Descripción
get('clave') Devuelve el valor asociado a la clave introducida.
pop('clave') Devuelve el valor asociado a la clave introducida y elimina la entrada en el diccionario.
update({'clave': 'valor'}) Si la clave ya existe en el diccionario, actualiza su valor asociado. En otro caso, crea una nueva entrada

Podemos obtener el valor asociado a una clave mediante el uso del método get o llamando al diccionario con el operador [ ] y la clave dentro.

In [ ]:
''' Obteniendo valores del diccionario '''

peliculas = {'2011': 'Thor', 
             '2013': 'Iron man 3', 
             '2016': 'Dr. Strange', 
             '2019': 'Capitana Marvel' 
            }

# Vamos a obtener valores del diccionario

print( peliculas.get('2011') )    # Muestra como salida la cadena Thor

print( peliculas['2016'] )        # Muestra como salida Dr. Strange

La diferencia entre ambas formas radica en que pop borra la entrada que ha devuelto, mientras que get no la borra. Si la clave proporcionada no existiese en el diccionario mientras que el método get devolvería el valor None, el método pop devolvería un KeyError.

In [ ]:
print( peliculas.get('2011') )    # Muestra como salida la cadena Thor
In [ ]:
print( peliculas['2016'] )        # Muestra como salida Dr. Strange

Podemos añadir o actualizar el contenido de nuestro diccionario utilizando el método update o asignandole a una clave directamente y un valor.

Ejemplo: Añadiendo y actualizando elementos de un diccionario

In [ ]:
''' Añadiendo y actualizando elementos de un diccionario '''

peliculas = {'2011': 'Thor', 
             '2013': 'Iron man 3', 
             '2016': 'Dr. Strange', 
             '2019': 'Capitana Marvel' 
            }

print("\n",peliculas)   # imprimimos el contenido del diccionario

# Vamos a obtener valores del diccionario

peliculas.update({'2008':'Iron Man'})           # Insertamos un nuevo valor y clave
peliculas['2014'] = 'Guardianes de la Galaxia'  # Insertamos un nuevo valor y clave

print("\n",peliculas)  # imprimimos el contenido del diccionario

peliculas.update({'2008':'El increible Hulk'})  # Actualizamos la clave 2008 con el valor nuevo
peliculas['2019'] =  'Avengers 4: Endgame'      # Actualizamos la clave 2019 con el valor nuevo

print("\n",peliculas)   # imprimimos el contenido del diccionario

Podemos añadir o actualizar el contenido de nuestro diccionario utilizando el método pop.

Ejemplo: Eliminando elementos de un diccionario

In [ ]:
''' Eliminando elementos de un diccionario '''

peliculas = {
    '2011': 'Thor', 
    '2013': 'Iron man 3', 
    '2016': 'Dr. Strange', 
    '2019': 'Avengers 4: Endgame', 
    '2008': 'El increible Hulk', 
    '2014': 'Guardianes de la Galaxia'}

print("\n",peliculas)  # imprimimos el contenido del diccionario

# Eliminamos la clave 2008 y 2014
peliculas.pop('2014')
peliculas.pop('2008')

print("\n",peliculas)  # imprimimos el contenido del diccionario

¡PRUEBA TÚ!

En este ejercicio vamos a poner en práctica los diferentes métodos que permiten gestionar un diccionario en Python. Para ello, completa el código del siguiente ejercicio.

In [ ]:
''' Trabajando con diccionarios  '''

premios_BAFTA = {
    '2003-2004' = 'Half-life 2',
    '2007-2008' = 'Super Mario Galaxy',
    '2009' = 'Batman Arkham Asylum',
    '2013' = 'The Last of Us',
    '2016' = 'Uncharted 4'
}


## Añadir a nuestro diccionario la clave '2018' con el valor asociado 'God of War'


## Consultar mediante el método get el valor de la clave 2007-2008


## Eliminar aquellos elementos del diccionario cuya clave sea menor al 2005


## Modificar el contenido de la clave 2016 para que sea igual a Uncharted 4: A Thief`s End


## Imprimir el diccionario

6. ¿Qué hemos aprendido?.

Una vez terminado el cuaderno, vamos a realizar un pequeño resumen acerca de lo visto hasta ahora:

  • Python proporciona diferentes estructuras de datos para realizar colecciones de elementos. Dichas estructuras son: listas, tuplas, conjuntos y diccionarios.
  • Las estructuras de datos pueden ser mutables, si permiten modificar su contenido una vez creadas, o inmutables, si no permite modificar su contenido una vez creadas. Listas , conjuntos y diccionarios son estructuras mutables y la tupla es una estructura inmutable.
  • Los elementos de una lista o una tupla se encuentran ordenados. Esto permite que se puede utilizar la notación slice para la obtención de sublistas o subtuplas.
  • Los conjuntos no admiten repetición de elementos y sus elementos no tienen un orden establecido.Python proporciona métodos para realizar operaciones con conjuntos como la unión, la intersección y la diferencia.
  • Los diccionarios son un conjunto de pares clave-valor.Sus elementos no tienen un orden establecido. Las claves de un diccionario son únicas, es decir, no puede haber dos iguales. Sin embargo, los valores no tienen porque ser únicos.

7. Relación de ejercicios.

EJERCICIO 1: ¿Sabrías decir cuál es la salida del siguiente código sin ejecutarlo?.

In [ ]:
## Elimina las comillas para ejercutar el código y comprobar el resultado de salida.
'''

mi_lista = list()
mi_tupla = tuple()
mi_conjunto = set()
mi_diccionario = dict()

print(mi_lista)
print(mi_tupla)
print(mi_conjunto)
print(mi_diccionario)

'''

EJERCICIO 2: ¿Sabrías decir cuál es la salida del siguiente código sin ejecutarlo?.

In [ ]:
## Elimina las comillas para ejercutar el código y comprobar el resultado de salida.
'''

estructura = {}

print(estructura)
print("\n",type(estructura))

'''

EJERCICIO 3: ¿Sabrías decir cuál es la salida del siguiente código sin ejecutarlo?.

In [ ]:
## Elimina las comillas para ejercutar el código y comprobar el resultado de salida.
'''

mi_lista = [1,2,3,4,5,6,7,8,9,10]
mi_tupla = ('a','c','u','r','r','u','c','a')

print(mi_lista[::2])
print(mi_lista[2::3])

print(mi_tupla[::])
print(mi_tupla[-1:-9:-1])

'''

EJERCICIO 4: ¿Sabrías decir cuál es la salida del siguiente código sin ejecutarlo?.

In [ ]:
## Elimina las comillas para ejercutar el código y comprobar el resultado de salida.
'''

primos = {1, 2, 3, 5, 7, 11, 13, 17}

primos.add(19)
primos.add(23)
primos.discard(2)
primos.discard(1)

print("\n",primos)
print("\n",type(primos))

'''

EJERCICIO 5: Realiza cambios en el la notación slice para imprimir los múltiplos de 3 mayores que o iguales que 10 y menores que 22.

In [ ]:
## La salida debería ser [12,15,18,21]

multiplos_3 = (0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30)

print(multiplos_3[::])

EJERCICIO 6: Realiza cambios en el la notación slice para imprimir la lista de elementos en orden decreciente situados en índice impar

In [ ]:
## La salida debería ser [23,17,11,5,2]
primos = (1, 2, 3, 5, 7, 11, 13, 17, 19, 23)

print(primos[::2])

EJERCICIO 7: Crear un diccionario donde la clave será el nombre del país y el valor asociado una lista con las 3 comidas típicas del país. Busca información acerca de la comida de los siguientes países y añadelos en el diccionario: España, Portugal, Francia e Italia.

In [ ]: