Conjuntos, sets en Python

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

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.