Conjuntos de Python

Python viene equipado con varios tipos de datos incorporados para ayudarnos a organizar nuestros datos. Estas estructuras incluyen listas, diccionarios, tuplas y conjuntos (sets).

De la documentación de Python 3

Un conjunto es una colección desordenada sin elementos duplicados. Los usos básicos incluyen la prueba de pertenencia y la eliminación de entradas duplicadas.

Lea Python Sets: What, Why and How para una referencia más profunda.

Inicialización de un conjunto

Hay dos formas de crear conjuntos: usando llaves {} y la función incorporada set()

Conjuntos Vacíos

Al crear un conjunto, asegúrese de no usar llaves vacías {} o, en su lugar, obtendrá un diccionario vacío.

# Crear conjunto usando llaves o la función set()
s = {1, 2, 3}  # Usando llaves
s = set([1, 2, 3])  # Usando el constructor set()

# Advertencia: {} vacío crea un diccionario, no un conjunto
s = {}  # esto creará un diccionario en lugar de un conjunto
type(s)  # Devuelve <class 'dict'>
<class 'dict'>

Colecciones desordenadas de elementos únicos

Un conjunto elimina automáticamente todos los valores duplicados.

# Los conjuntos eliminan automáticamente los duplicados
s = {1, 2, 3, 2, 3, 4}  # Se eliminan los duplicados
s  # Devuelve {1, 2, 3, 4}
{1, 2, 3, 4}
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué sucede cuando crea un conjunto con valores duplicados?
A. Los duplicados se eliminan automáticamente
B. Se genera un error
C. El conjunto conserva todos los duplicados
D. Solo se conserva la primera ocurrencia

Y como tipo de dato desordenado, no se puede indexar.

s = {1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

set add y update

Usando el método add() podemos agregar un solo elemento al conjunto.

# Método add(): agregar un solo elemento al conjunto
s = {1, 2, 3}
s.add(4)  # Agregar elemento 4
s
{1, 2, 3, 4}

Y con update(), múltiples elementos:

# Método update(): agregar múltiples elementos de un iterable
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6])  # Agregar múltiples elementos (duplicados ignorados)
s
{1, 2, 3, 4, 5, 6}

set remove y discard

Ambos métodos eliminarán un elemento del conjunto, pero remove() generará un key error si el valor no existe.

# Método remove(): eliminar elemento, genera KeyError si no se encuentra
s = {1, 2, 3}
s.remove(3)  # Eliminar elemento 3
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

discard() no generará ningún error.

# Método discard(): eliminar elemento, sin error si no se encuentra
s = {1, 2, 3}
s.discard(3)  # Eliminar elemento 3 (seguro, sin error si falta)
s
{1, 2}
s.discard(3)
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Cuál es la diferencia entre los métodos remove() y discard() para conjuntos?
A. remove() elimina un elemento, discard() elimina todos
B. No hay diferencia
C. remove() genera un error si el elemento no existe, discard() no lo hace
D. remove() es más rápido

set union

union() o | crearán un nuevo conjunto con todos los elementos de los conjuntos proporcionados.

# union(): combinar todos los elementos de múltiples conjuntos (sin duplicados)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2)  # o 's1 | s2' - devuelve {1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

set intersection

intersection() o & devolverán un conjunto con solo los elementos que son comunes a todos ellos.

# intersection(): devolver elementos comunes a todos los conjuntos
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3)  # o 's1 & s2 & s3' - devuelve {3}
{3}
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué devuelve intersection() para los conjuntos?
A. Todos los elementos de todos los conjuntos
B. Solo los elementos que son comunes a todos los conjuntos
C. Elementos en el primer conjunto pero no en los otros
D. Elementos en cualquiera de los conjuntos pero no en ambos

set difference

difference() o - devolverán solo los elementos que son únicos para el primer conjunto (conjunto invocado).

# difference(): devolver elementos en el primer conjunto pero no en otros
s1 = {1, 2, 3}
s2 = {2, 3, 4}

s1.difference(s2)  # o 's1 - s2' - devuelve {1}
{1}
s2.difference(s1) # o 's2 - s1'
{4}

set symmetric_difference

symmetric_difference() o ^ devolverán todos los elementos que no son comunes entre ellos.

# symmetric_difference(): devolver elementos en cualquiera de los conjuntos, pero no en ambos
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2)  # o 's1 ^ s2' - devuelve {1, 4}
{1, 4}
Quiz

Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje

¿Qué devuelve symmetric_difference() para dos conjuntos?
A. Todos los elementos de ambos conjuntos
B. Solo los elementos comunes a ambos conjuntos
C. Elementos en el primer conjunto pero no en el segundo
D. Elementos en cualquiera de los conjuntos, pero no en ambos

Enlaces relevantes