Curso de Python / Eliminar duplicados con conjuntos y elegir colecciones
Un conjunto guarda elementos hashables únicos y permite comprobar pertenencia y realizar operaciones entre conjuntos. Convertir datos a set elimina la cantidad de repeticiones y la información de posición; decide primero si necesitas conservar esos datos.
Crear conjuntos e interpretar sus operaciones
Para un conjunto no vacío puedes escribir {"food", "books"}. Para uno vacío utiliza set(): las llaves vacías {} crean un diccionario. Los elementos deben ser hashables, por lo que una lista o un diccionario no pueden ser miembros de un conjunto.
El orden de recorrido de un conjunto no debe utilizarse como un orden de presentación significativo ni como un sistema de índices. Si necesitas una salida ordenada, solicítala expresamente.
| Expresión | Significado |
|---|---|
| a | b | Unión: elementos presentes en cualquiera de los dos |
| a & b | Intersección: elementos comunes |
| a - b | Elementos presentes en a y ausentes en b |
| a ^ b | Elementos presentes solo en uno de los conjuntos |
La referencia oficial de set y frozenset describe sus operaciones. El requisito de las claves hashables también aparece al trabajar con diccionarios.
Comparar categorías utilizadas y permitidas
Guarda este programa como sets.py en UTF-8 y ejecuta python sets.py en la carpeta de práctica con el entorno del proyecto seleccionado. Si utilizas el intérprete externo al entorno en macOS o Ubuntu, adapta el nombre de la orden a python3 cuando corresponda.
used = {"food", "transport", "food"}
allowed = {"food", "books"}
print(sorted(used))
print(sorted(used & allowed))
print(sorted(used - allowed))
used.discard("missing")
print("food" in used)
La salida esperada muestra los elementos ordenados para facilitar la comparación:
['food', 'transport']
['food']
['transport']
True
La repetición de food se reduce a un único miembro. used - allowed identifica transport como categoría no permitida. sorted() devuelve una lista ordenada para mostrar los resultados; no convierte el conjunto en una secuencia ordenada.
Distinguir unicidad y validación de duplicados
Dos transacciones con el mismo importe pueden ser dos pagos diferentes. Si conviertes sus importes a un conjunto, dos pagos de 8000 se convierten en un solo elemento y la suma deja de representar lo ocurrido. Eliminar valores repetidos no equivale a validar identificadores de transacción repetidos.
Utiliza un identificador estable y decide si un ID repetido debe rechazarse o actualizar el registro existente. La validación de CSV y la generación de informes aplica esa distinción a datos de entrada.
Para elementos hashables, list(dict.fromkeys(items)) permite quitar duplicados conservando el orden de su primera aparición. Aun así, comprueba que cada repetición eliminada no representaba un dato significativo: una transformación cómoda puede esconder errores de entrada.
Elegir la colección y el comportamiento ante ausencias
remove() produce KeyError si el elemento no existe; discard() acepta esa ausencia. La excepción es útil cuando el elemento debe existir. discard() resulta apropiado cuando quitar algo es opcional y no encontrarlo forma parte del funcionamiento normal.
Añade food otra vez y comprueba que el tamaño no aumenta. Después añade books a used y compara la intersección. Restaura los datos antes de continuar para mantener constantes las condiciones de la prueba.
Elige una lista para conservar orden y repeticiones, una tupla para un registro posicional breve, un diccionario para consultas por nombre y un conjunto para unicidad y pertenencia. La información que debes conservar determina la estructura, no la brevedad de una conversión.




