No estaba muy seguro de hacer esta Pyldora Pythonica, al menos de hacerlo a estas altura. No por que este tipo de dato no tenga importancia, sino porque habitualmente no lo utilizo. De hecho, lo utilizo en raras ocasiones. Sin embargo, antes de saltar al control de flujo quería dejar resueltos los tipos de datos mas importantes, entre los que se recoge también este. No he podido resistirme a cerrar este este episodio de tipos de datos.
Conjuntos, sets en Python
Lo primero y principal es aclarar que son esto de los sets
en Python, y como su propio nombre indica, un set
o conjunto
es una colección que ni está ordenada, ni está indexada y cuyos elementos no se pueden modificar. Esto no quiere decir que no puedas modificar el conjunto, sino que no puedes modificar un elemento del conjunto. Otra características interesante des los sets
es que no pueden contener duplicados.
Por otro lado, los sets
pueden contener cualquier tipo de datos, incluso es posible que un set
contenga diferentes tipos de datos, es decir, que sea completa o parcialmente heterogéneo. Por ejemplo,
set1 = {"valor1", "valor2", "valor3"}
set2 = {1, 2, 3}
set2 = {"valor1", 1, "valor2", 2}
¿Como acceder a los elementos de un set
?
Pues esto es algo relativamente complejo, en el sentido de que no puedes acceder por índice o clave. Solo puedes iterar sobre los diferentes elementos de un conjunto, para ello, tienes que utilizar alguna de las estructuras de control, que veremos mas adelante, como por ejemplo,
for elemento in set1:
print(elemento)
O también, es posible comprobar si un elemento está en un determinado conjunto utilizando el operador in
, como en el siguiente ejemplo,
"valor1" in set1
Añadir elementos al conjunto
En el título de este apartado iba a poner a añadir o modificar elementos a un conjunto, pero como he indicado en la introducción a esta Pyldora Pythonica, lo cierto es que no es posible modificar los elementos del conjunto. Es decir, si bien, podemos modificar el conjunto en si, lo que no podemos hacer es modificar los distintos elementos que constituyen nuestro conjunto.
De sesta manera si quisieras añadir un nuevo elemento a tu conjunto lo podrías hacer utilizando el método add
, tal y como te muestro en el siguiente ejemplo,
>>> set1 = {"elemento1", "elemento2"}
>>> set1.add("elemento3")
>>> print(set1)
{"elemento1", "elemento2", "elemento3"}
Otra opción, muy interesante, que tienes para añadir elementos a tu conjunto es utilizar directamente otra colección a través del método update()
. Por ejemplo,
>>> set1 = {"elemento1", "elemento2"}
>>> set1.update(["elemento3", "elemento4"])
>>> print(set1)
{"elemento1", "elemento2", "elemento3", "elemento4"}
De la misma forma, lo podrías hacer con tuplas y con diccionarios. Aunque en el caso de los diccionarios, tienes que tener en cuenta que lo que vas a añadir por defecto son las claves. Por ejemplo,
>>> set1 = {'el2', 'el3', 'el1'}
>>> set1.update({"el4": "v4", "el5": "v5"})
>>> print(set1)
set(['el2', 'el3', 'el1', 'el4', 'el5'])
Si lo que quieres es añadir los valores del diccionario, en lugar de las claves tendrás que utilizar el método values
del tipo diccionario, como en el ejemplo que te muestro a continuación,
>>> set1 = {'el2', 'el3', 'el1'}
>>> set1.update({"el4": "v4", "el5": "v5"}.values())
>>> print(set1)
set(['el2', 'el3', 'el1', 'v4', 'v5'])
Además de estas opciones para añadir elementos a un conjunto también tienes la posibilidad de realizar la unión de dos conjuntos, para lo que puedes utilizar el método union()
. Por ejemplo,
>>> set1 = {"a", "b"}
>>> set2 = {"b", "c", "d"}
>>> set3 = set1.union(set2)
>>> print(set3)
set(['a', 'c', 'b', 'd'])
Fíjate en este último ejemplo, que aunque he repetido uno de los valores en ambos conjuntos, en la unión de ambos conjuntos, no aparece repetida, tal y como te adelanté al principio de esta Pyldora.
Eliminar elementos de un conjunto
Para eliminar elementos de un conjunto tienes dos métodos equivalentes discard
y remove
. Puedes utilizar indistintamente uno u otro, con exactamente el mismo resultado. Así por ejemplo,
>>> set1 = {'el2', 'el3', 'el1'}
>>> set1.remove("el2")
>>> print(set1)
set(['el3', 'el1'])
Además de estos dos métodos totalmente equivalentes, tienes el método pop()
que ya vimos en otras colecciones. Sin embargo, en este caso particular tiene una casuística importante. Como comenté al principio de esta Pyldora Pythonica, los conjuntos son elementos que no están ordenados. Si te fijas, cada vez que imprimes un conjunto, los valores te los muestra en un orden. Esto quiere decir, que al utilizar el método pop
sabes que estás quitando un elemento del conjunto pero no sabes que elemento se está quitando con pop. Eso si, una vez lo hayas quitado si que eres conocedor de cual quitaste, pero es una auténtica lotería. Por ejemplo,
>>> set1 = {'el2', 'el3', 'el1'}
>>> x = set1.pop()
>>> print(x)
el3
Además de estos métodos, también tienes el método clear()
, que te permite vaciar el conjunto de forma que te quedarás con un conjunto vacío. Y por supuesto, también puedes utilizar la función del
, con esto no solo vaciarás el conjunto, sino que además lo desasignarás. Es decir, que si intentas ver el contenido de esa variable, te dirá que esa variable no está definida.
Operaciones con conjuntos
Como ya te podías imaginar con solo ver el método union()
, las operaciones con conjuntos se ven claramente reflejadas en los métodos de este tipo de datos. Así, además de los métodos que has podido ver hasta el momento, también puedes disfrutar de otros métodos como los siguientes,
difference
>>> set1 = {"a", "b"}
>>> set2 = {"b", "c", "d"}
>>> set1.difference(set2)
set(['a'])
intersection
>>> set1 = {"a", "b"}
>>> set2 = {"b", "c", "d"}
>>> set1.intersection(set2)
set(['b'])
intersection_update
>>> set1 = {"a", "b"}
>>> set2 = {"b", "c", "d"}
>>> set1.intersection_update(set2)
>>> print(set1)
set(['b'])
Además de estos métodos, también tienes otros métodos que te permitirán realizar observaciones sobre la relación entre diferentes conjuntos, como subset
, superset
, y mas
El vídeo
En este vídeo encontrarás lo mismo que en esta Pyldora pero con mis propias palabras, para que veas en directo algunos casos de como utilizar los conjuntos.