Conjuntos o sets en Python 3

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.

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

Para crear un conjunto lo podemos hacer a partir de listas, diccionarios o tuplas, también vacíos por supuesto, para ellos utilizamos la función set(). En el siguiente ejemplo le pasamos a la función type el conjunto set_num, verás que el tipo de dato es set.

set_num = set()
type(set_num)
# Salida
<class 'set'>

Nota

Los conjuntos también pueden crearse directamente entre llaves {}

Veamos en este ejemplo que no utilizamos la función set() y además, accedemos a sus elementos por medio de un bucle for.

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 

Básicamente he creado un conjunto y por medio de un bucle for iteramos para acceder a cada uno de los elementos del conjunto. Por último, he utilizado un operador ternario donde el número de elementos no puede superar a 5 para así, separarlos por comas.

Visto esto, podemos hacer lo mismo con una colección de tipo tupla y el resultado será idéntico.

# 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 ", ")
# 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 en este caso, obtener el número de elementos de un conjunto:

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

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.

Nota

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)

# Salida
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.

Sigue el tutorial

Tuplas en Python 3

¿Te ha parecido útil?