Tema 8. Estructura de Datos. Conjuntos
Explicación del uso de estructuras de datos tipo conjuntos en Python 3.
Conjunto
Ahora, es el turno de los conjuntos. Éstos son una estructura sin orden que no admiten múltiples ocurrencias de un mismo elemento. Pueden ser definidos a partir de una lista con la función set(), o bien, los elementos del conjunto pueden ir entre llaves, {}, y estar separados por comas.
Los conjuntos son:
hetereogéneos: los elementos pueden ser de distinto tipo en un mismo conjunto
no mutables: los elementos no pueden ser modifcados una vez el conjunto ha sido creado
Los conjuntos pueden construirse con la función set() o directamente entre llaves, {}.
set1 = set([1, 7, 4, 2, 0])
print(set1)
type(set1)
#RESPUESTA
{0, 1, 2, 4, 7}
setset2 = set((1, 7, 4, 2, 0))
print(set2)
type(set2)
#RESPUESTA
{0, 1, 2, 4, 7}
setComo se ha dicho antes, los conjuntos no admiten elementos repetidos:
Observación. Al decir que los conjuntos no tienen orden, lo que ocurre es que Python no mantendrá el que hemos introducido, tal y como hacía con las listas, sino que reordenará todos los elementos por orden primero numérico (yendo antes los negativos que los positivos) y luego alfabético de las claves. Con la función print(), el conjunto no se ordena correctamente.
Por lo que hemos visto hasta ahora, podemos decir que los conjuntos en Python son fieles a la definición matemática de éstos, salvo por el hecho de que en Python un conjunto no puede contener como elemento a otro conjunto:
Conjunto. Colección de elementos pertenecientes a la misma categoría, y cuya agrupación puede ser considerada o identificada en sí misma como un objeto. Un conjunto queda definido únicamente por sus elementos y por nada más. En particular, un conjunto puede escribirse como una lista de elementos, pero cambiar el orden de dicha lista o añadir elementos repetidos no define un conjunto nuevo.
Subconjuntos
Subconjunto. Un subconjunto B de un conjunto A es un conjunto que contiene algunos de los elementos de A (o quizá todos). Se denota por B ⊆ A
Subconjunto propio. Un subconjunto propio B de un conjunto A es un conjunto que tiene algunos de los elementos de A, pero no todos. Se denota por B ⊂ A
Para saber si un conjunto B es subconjunto del conjunto A, podemos utilizar el método .issubset() o el comparador <=. Para saber si se trata de un subconjunto propio, tenemos el comparador <.
Superconjunto. Un superconjunto A de un conjunto B es un conjunto que contiene a B. Se denota por A ⊇ B
Superconjunto propio. Un superconjunto propio A de un conjunto $ es un conjunto que contiene a B y consta de al menos un elemento más. Se denota por A ⊃ B
Para saber si un conjunto A es superconjunto del conjunto B, podemos utilizar el método .issuperset() o el comparador >=. Para saber si se trata de un superconjunto propio, tenemos el comparador >.
Ojo: ¡Pero no todos los conjuntos son siempre subconjunto o superconjunto unos de otros!
Operaciones con conjuntos
Dados los conjuntos A y B, vamos a ver una serie de operaciones que podemos hacer con ellos.
Unión. La unión de dos conjuntos A y B es un nuevo conjunto A ∪ B que contiene todos los elementos de A y/o todos los de B. En Python, la unión de dos conjuntos se consigue con la función | o bien, con el método .union()
Intersección. La intersección entre dos conjuntos A y B es un nuevo conjunto A ∩ B que contiene todos los elementos comunes de A y B.
En Python, la intersección de dos conjuntos se consigue con la función & o bien, con el método .intersection()
Diferencia. La diferencia entre dos conjuntos A y B es un nuevo conjunto A - B que contiene todos los elementos de A que no están en B
En Python, la diferencia de dos conjuntos se consigue con la función - o bien, con el método .difference()
Diferencia simétrica. La diferencia entre dos conjuntos A y B es un nuevo conjunto A Δ B que contiene todos los elementos de A ∪ B no están en A ∩ B
En Python, la diferencia simétrica de dos conjuntos se consigue con el método .symmetric_difference()
Elementos de un conjunto
Podemos añadir un elemento a un conjunto con el método .add()
Para añadir elementos de otro conjunto en el conjunto actual, podemos usar el método .update()
Observación. El método .update() nos permite añadir los elementos de un iterable al conjunto actual
Podemos averiguar si un elemento pertenece a un conjunto con el operador in
También podemos eliminar elementos de un conjunto con los métodos .remove() o .discard()
Observación. Si intentamos eliminar un elemento que no existe ya de por sí en el conjunto con el método .remove(), Python nos devolverá error, mientras que con el método .discard() no devolverá ningún error.
Tamaño de un conjunto
Para saber cuántos elementos contiene un conjunto, podemos usar la función len()del siguiente modo:
Bucles y conjuntos
Podemos acceder a todos los elementos de un conjunto mediante un bucle for
Más métodos de conjuntos
El método .pop() nos devuelve un objeto del conjunto (como no hay orden, no sabemos cuál es) y lo elimina de éste.
El método .clear() vacía el conjunto.
EJERCICIO 1:
Vamos a pedirle al usuario una frase y vamos a guardar en un conjunto las letras que aparecen en dicha frase.
EJERCICIO 2:
Vamos a pedirle al usuario dos palabras y vamos a calcular la intersección de las letras de cada palabra. Para ello habrá que crear dos conjuntos que contendrán, respectivamente, las letras que forman cada palabra.
EJERCICIO 3:
Vamos a pedirle 4 números enteros al usuario. Se corresponderán con los extremos de los intervalos [a,b] y [c,d] . Vamos a generar dos conjuntos que guarden, respectivamente, los enteros contenidos en cada uno de los intervalos (incluyendo los extremos) y, finalmente, calcularemos la diferencia simétrica.
EJERCICIO 4:
Vamos a guardar en un conjunto los números primos comprendidos entre 2 y el número n que nos indique el usuario mediante la criba de Eratóstenes.
EJERCICIO 5:
Vamos a crear un programa que nos devuelva el elemento máximo de un conjunto sin utilizar la función max().
REPASO
Last updated