Dominando Conjuntos en Python: Creación, Manipulación y Operaciones
Conjuntos en Python
Descubre cómo el tipo de dato set de Python simplifica la desduplicación de datos y operaciones basadas en conjuntos. Esta guía cubre creación, modificación, eliminación y todas las operaciones esenciales.
Video: Conjuntos en Python
Un conjunto es una colección no ordenada de elementos únicos e inmutables. Aunque el conjunto en sí es mutable —permitiendo añadir o eliminar elementos— sus elementos individuales deben ser hashables (ej. números, cadenas, tuplas).
Los conjuntos de Python soportan operaciones matemáticas de conjuntos como unión, intersección, diferencia y diferencia simétrica, lo que los hace ideales para tareas como desduplicación de datos, pruebas de pertenencia y álgebra de conjuntos.
Crear Conjuntos en Python
Usa llaves o el constructor integrado set() para crear un conjunto. Los elementos pueden ser de cualquier tipo inmutable, pero tipos mutables como listas, diccionarios u otros conjuntos no pueden incluirse.
# Ejemplo 1: Conjuntos con diferentes tipos de datos
# conjunto de enteros
my_set = {1, 2, 3}
print(my_set)
# conjunto de tipos mixtos
my_set = {1.0, 'Hola', (1, 2, 3)}
print(my_set)
Salida
{1, 2, 3} {1.0, (1, 2, 3), 'Hola'}
Observa cómo los valores duplicados se eliminan automáticamente y cómo las tuplas —al ser inmutables— son aceptadas.
# Eliminando duplicados
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# Construyendo un conjunto desde una lista
my_set = set([1, 2, 3, 2])
print(my_set)
# Intentar incluir un elemento mutable causa error
# my_set = {1, 2, [3, 4]} # TypeError: unhashable type: 'list'
Salida
{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'
Crear un conjunto vacío requiere el constructor set(); usar {} crea un diccionario vacío en su lugar.
# Distinguir conjunto y diccionario al crear estructuras vacías
a = {}
print(type(a))
a = set()
print(type(a))
Salida
<class 'dict'> <class 'set'>
Modificar un Conjunto en Python
Los conjuntos son mutables, pero no soportan indexación ni slicing debido a su naturaleza no ordenada.
Usa add() para insertar un solo elemento y update() para fusionar otro iterable en el conjunto. Las entradas duplicadas se ignoran automáticamente.
# Ejemplo: Añadiendo elementos
my_set = {1, 3}
print(my_set)
# Intentar indexar un conjunto lanza error
# my_set[0] # TypeError: 'set' object does not support indexing
# Añadir un solo elemento
my_set.add(2)
print(my_set)
# Añadir múltiples elementos desde una lista
my_set.update([2, 3, 4])
print(my_set)
# Combinar una lista y otro conjunto
my_set.update([4, 5], {1, 6, 8})
print(my_set)
Salida
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
Eliminar Elementos de un Conjunto
Usa discard() para eliminar un elemento si existe, o no hacer nada si no existe. En contraste, remove() lanza KeyError cuando el elemento está ausente.
# Ejemplo: Discard vs. remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# Lo siguiente lanzará KeyError
# my_set.remove(2)
Salida
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2
El método pop() elimina y devuelve un elemento arbitrario, mientras que clear() vacía el conjunto completamente.
# Ejemplo pop y clear
my_set = set("HolaMundo")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)
Salida
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()
Operaciones de Conjuntos en Python
Los conjuntos de Python soportan álgebra de conjuntos clásica: unión, intersección, diferencia y diferencia simétrica. Estas pueden invocarse vía operadores o métodos dedicados.
Usemos dos conjuntos de ejemplo:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
Unión

La unión de A y B combina todos los elementos distintos.
print(A | B)
Salida
{1, 2, 3, 4, 5, 6, 7, 8}
Intersección

La intersección devuelve solo elementos comunes a ambos conjuntos.
print(A & B)
Salida
{4, 5}
Diferencia

La diferencia A - B lista elementos presentes en A pero no en B.
print(A - B)
Salida
{1, 2, 3}
Diferencia Simétrica

La diferencia simétrica A ^ B devuelve elementos que están en uno u otro conjunto pero no en ambos.
print(A ^ B)
Salida
{1, 2, 3, 6, 7, 8}
Métodos Adicionales de Conjuntos
Referencia rápida de todos los métodos integrados disponibles en objetos set:
| Método | Descripción |
|---|---|
| add() | Añade un elemento al conjunto |
| clear() | Elimina todos los elementos |
| copy() | Devuelve una copia superficial |
| difference() | Devuelve nuevo conjunto con elementos en el llamador pero no en otros |
| difference_update() | Eliminación de diferencia in-place |
| discard() | Elimina elemento si está presente; sin error si ausente |
| intersection() | Devuelve nuevo conjunto de elementos comunes |
| intersection_update() | Actualización de intersección in-place |
| isdisjoint() | True si los conjuntos no tienen elementos en común |
| issubset() | True si el llamador es subconjunto de otro |
| issuperset() | True si el llamador contiene otro conjunto completamente |
| pop() | Elimina y devuelve elemento arbitrario; KeyError si vacío |
| remove() | Elimina elemento; KeyError si ausente |
| symmetric_difference() | Devuelve nuevo conjunto de elementos exclusivos a cada conjunto |
| symmetric_difference_update() | Actualización de diferencia simétrica in-place |
| union() | Devuelve nuevo conjunto con todos los elementos únicos |
| update() | Unión in-place con otro iterable |
Prueba de Pertenencia en Conjuntos
Verifica existencia de elemento usando la palabra clave in.
my_set = set("manzana")
print('a' in my_set) # True
print('p' not in my_set) # False
Salida
True False
Iterar sobre un Conjunto
Recorre un conjunto con un bucle for estándar; el orden no está garantizado.
for letra in set("manzana"):
print(letra)
Funciones Integradas con Conjuntos
Funciones como len(), max(), min(), sum(), all(), any() y sorted() funcionan perfectamente con conjuntos. Tabla de utilidades comunes:
| Función | Descripción |
|---|---|
| all() | True si todos los elementos son verdaderos (o conjunto vacío) |
| any() | True si al menos un elemento es verdadero |
| enumerate() | Itera con índice, útil para depuración |
| len() | Número de elementos |
| max() | Elemento mayor |
| min() | Elemento menor |
| sorted() | Devuelve lista ordenada desde el conjunto |
| sum() | Suma de todos los elementos numéricos |
Frozenset en Python
Un frozenset es la contraparte inmutable de un conjunto. Una vez creado, sus elementos no pueden cambiar, lo que lo hace hashable y usable como clave de diccionario.
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
Las operaciones soportadas son las mismas que los conjuntos regulares, excepto los métodos mutantes.
print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# Intentar añadir un elemento lanza AttributeError
# A.add(3) # AttributeError: 'frozenset' object has no attribute 'add'
python
- Dominando tipos de datos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
- Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
- Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
- Visión general de Python: Lenguaje de alto nivel, legible, interactivo y orientado a objetos
- Números en Python: Entendiendo tipos de datos numéricos inmutables
- Dominando cadenas en Python: Creación, acceso y manipulación