Historia de la cuestión:
El tipo set (conjunto) se agregó en Python 2.4 y proporciona una forma conveniente y rápida de almacenar elementos únicos e inmutables, con soporte para operaciones de teoría de conjuntos (unión, intersección, etc.). Los conjuntos se implementan en base a tablas hash.
Problema: Muchos usuarios no comprenden la diferencia entre set y list, las características de almacenamiento de elementos en set (desorden, solo objetos hashable), así como los matices de usar conjuntos para optimizar la búsqueda, la verificación de unicidad o el trabajo con grandes conjuntos de datos.
Solución:
Set es un contenedor mutable y desordenado de objetos hashable únicos. Soporta operaciones rápidas de búsqueda de pertenencia, unión, intersección, diferencia y diferencia simétrica. Métodos integrados: add, remove, discard, update, intersection, difference, union, symmetric_difference y otros.
Ejemplo de código:
nums = {1, 3, 5, 7} nums.add(9) nums.update([5, 10]) # 5 ya está, solo se añadirá 10 other = {3, 9, 11} inter = nums & other # intersección {3, 9} # Verificación de pertenencia — más rápida que en list y = 11 if y in nums: print('¡Está!')
Características clave:
in es increíblemente rápida (O(1) promedio), a diferencia de la lista (O(n)).¿Se puede añadir una lista u otro set a un set?
Respuesta: No, no se puede. Solo se permiten objetos hashable (inmutables): cadenas, números, tuplas. Las listas y conjuntos son mutables y no se pueden añadir.
Ejemplo de código:
s = set() s.add([1, 2]) # TypeError: tipo unhashable: 'list' s.add((1, 2)) # OK
¿Cuál es la diferencia entre el método remove y discard en set?
Respuesta: remove(value) lanza una excepción KeyError si value no se encuentra. discard(value) simplemente no hace nada en silencio si ese elemento no existe.
Ejemplo de código:
s = {1, 2, 3} s.remove(4) # KeyError s.discard(4) # No hay error
¿Es un conjunto vacío {} un objeto set?
Respuesta: No. El literal {} es siempre un dict vacío. Para crear un set vacío, se debe usar la función set().
Ejemplo de código:
empty_set = {} # Esto es dict empty_set_real = set() # Esto es set
Caso negativo
Intentan almacenar objetos únicos en una lista y hacer una verificación a través de "in" para buscar duplicados con grandes volúmenes de datos.
Ventajas:
Desventajas:
Caso positivo
Usan set para buscar intersecciones y datos únicos en grandes matrices (por ejemplo, listas de correos electrónicos), evitando duplicados y realizando la operación rápidamente.
Ventajas:
Desventajas: