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}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
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)
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
remove() y discard() para conjuntos?remove() elimina un elemento, discard() elimina todosremove() genera un error si el elemento no existe, discard() no lo haceremove() es más rápidoset 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}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
intersection() para los conjuntos?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}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
symmetric_difference() para dos conjuntos?