Conjuntos o sets en Python 3

Por Alejandro van den Akker

Los conjuntos o sets conocidos de las matemáticas, concretamente en matemáticas discretas, son una estructura de datos desordenada que no admite valores repetidos. El tipo de datos que representan estos conjuntos se denominan set y pueden ser heterogéneos pero no mutables.

Existen discrepancias sobre si los conjuntos son mutables o no, ya que una vez creado un conjunto aunque sus elementos sean inmutables el conjunto en sí es mutable. Por ejemplo, cualquier modificación del mismo, bien sea eliminar un elemento o todos a la vez ya lo hace mutable.

Si quieres profundizar sobre la mutabilidad de los conjuntos, listas, diccionarios o tuplas, echa un vistazo en Google a los múltiples blogs que hablan sobre ello, en especial el de covantec.

Otro punto importante es que los elementos del conjunto no están indexados como puede ser el caso de las listas.

También te puede interesar:

Crear un conjunto

Los conjuntos pueden crearse a partir de la función set() y se puede acceder a sus elementos con un bucle for:

# Colección de tipo tupla
set_num = set((1, 2, 3, 4, 5))

for t in set_num:
    print(t, end = " "  if t >= 5 else ", ")
    # El condicional me sirve para separar
    # los elementos en comas >= a 5
# Salida
1, 2, 3, 4, 5 

Si hacemos un type(set_num) verás que el tipo de dato es set. También podemos crear un conjunto con llaves {} de la siguiente forma:

set_num = {1, 2, 3, 4, 5}

for s in set_num:
    print(s, end = " "  if s >= 5 else ", ")
# Salida
1, 2, 3, 4, 5 

Como comenté al principio del artículo los conjuntos no admiten elementos repetidos. En el caso de que insertemos un elemento repetido en un conjunto este desaparecerá.

Por eso te recomiendo que si vas a almacenar distintos tipos de datos repetidos, te decantes por utilizar otro tipo de estructura como pueden ser las listas, tuplas o los diccionarios.

# Ejemplo de elemento repetido
set_num = {2, 3, 4, 4, 2, 3}
set_num
# Salida
{2, 3, 4}

Saber el número de elementos con len

Al igual que otras estructuras de datos, la función len() te permite obtener el número de elementos de un conjunto:

set_str = {"Tenis", "Golf", "Basket"}
len(set_str)
# Salida
3

Aprovechando la coyuntura como he dicho en varias ocasiones, el tipo de dato de los conjuntos es heterogénea, eso quiere decir que podemos insertar elementos de tipo string, int, float, etc.

Observación

Si lo que quieres es saber si un elemento específico se encuentra dentro de un conjunto, podemos utilizar el operador in de la siguiente manera:

set_str = {"Tenis", "Golf", "Basket"}
print("Tenis" in set_str)

# Nos devuelve
True

Unión, intersección y diferencia entre conjuntos

Uno de los principales usos del tipo set son las operaciones de álgebra de conjuntos, utilizado en el análisis de datos y en la Inteligencia Artificial entre otros.

Unión

Veamos la unión de dos conjuntos A y B cuyo conjunto A ∪ B contiene todos los elementos de A y B. En Python se utiliza el operador | para realizar dicha unión.

A, B = {1, 2, 3, 4}, {5, 2, 1}
A | B
# Salida
{1, 2, 3, 4, 5}

# Los elementos repetidos desaparecen
# como lo es el 1 y 2

Intersección

La intersección entre el conjunto A y B es un conjunto A ∩ B que contiene todos los elementos comunes de A y B. Puedes utilizar el operador &.

A, B = {1, 2, 3, 4}, {5, 2, 1}
A & B
# Salida
{1, 2}

# Elementos en común 1 y 2

Diferencia

La diferencia entre el conjunto A y B es un conjunto A – B que contiene todos los elementos de A que no contempla B. Puedes utilizar el operador -.

A, B = {1, 2, 3, 4}, {5, 2, 1, 9}
A - B
# Salida
{3, 4}

# Esta salida es de A
# a B y no a la inversa

Diferencia simétrica

La diferencia entre el conjunto A y B es un conjunto A ▵ B que contiene los elementos de A y B que no son comunes. Puedes utilizar el símbolo de conjunción ^.

A, B = {1, 2, 3, 4}, {5, 2, 1, 9}
A ^ B
# Salida
{3, 4, 5, 9}

# Observa los elementos no
# comunes entre A y B

Subconjuntos

Si toodos de los elementos de un conjunto B son también elementos de un conjunto A, entonces B es subconjunto de A, se expresa B ⊆ A.

A, B = {1, 2, 3, 4}, {3, 2, 1}
B <= A

# También puedes usar el método
# B.issubset(A)
# Salida
True

# Observa que todos los 
# elementos de B están en A

Si un conjunto B es un subconjunto de A y los dos conjuntos no son iguales, entonces B es un subconjunto propio, expresado B ⊂ A.

También están los superconjuntos, es decir, si A como superconjunto de un conjunto B, es un conjunto que contiene a B, se expresa A ⊇ B.

A, B = {21, 32, 41}, {32, 21, 41}
A >= B

# También puedes usar el método
# A.issuperset(B)
# Salida
True

# En el caso de que A contuviese
# un elemento más, sería un superconjunto
# propio expresado A ⊃ B y en Python
# sería A > B

En este punto he querido explicar el concepto de los conjuntos en Python, que como ves, es una pequeña introducción que te ayudará a trabajar con este tipo de estructuras . Si lo que quieres es profundizar más sobre conjuntos, te recomendaría que echases un vistazo al Álgebra de conjuntos.

Métodos de los conjuntos

Por último, veamos los métodos principales de los conjuntos.

Básicos

MétodoDescripción
add()Añadimos un elemento al conjunto.
update()Añadimos un elemento de otro conjunto al conjunto actual.
remove()Elimina los elementos del conjunto.
discard()Elimina los elementos del conjunto al igual que remove pero si no existe no devolverá error.
pop()Nos devuelve un elemento aleatorio del conjunto y lo elimina.
clear()Vacía el conjunto.
pop()Obtiene y elimina un elemento de forma aleatoria del conjunto.
union()Unión entre dos conjuntos y devuelve un conjunto nuevo.
difference()Busca los elementos que nos son comunes entre dos conjuntos.
difference_updates()Guarda en el conjunto los elementos no comunes entre dos conjuntos.
intersection()Devuelve un conjunto con los elementos comunes de dos conjuntos.
intersection_update()Guarda en un conjunto los elementos comunes entre dos conjuntos.
symmetric_difference()Devuelve todos los elementos no comunes entre dos conjuntos.

De comparación

MétodoDescripción
isdisjoint()Comprueba si el conjunto es disjunto de otro conjunto.
issuperset()Comprueba si un conjunto es superconjunto de un subconjunto.
issubset()Comprueba si un conjunto es subconjunto de otro.

Conclusión

Los conjuntos son estructuras de datos muy poderosas que con un buen uso, podemos desarrollar algoritmos bastante robustos y más si te dedicas a la ciencia de datos.

¿Te ha parecido útil?