Eliminar Elementos de un Set
Aprende a eliminar elementos de un set en Python con discard(), remove(), pop(), clear() y difference_update(), con ejemplos y advertencias prácticas.
Los sets de Python son mutables, por lo que puedes eliminar elementos en cualquier momento. El lenguaje ofrece varios métodos de eliminación, cada uno con un comportamiento diferente cuando el elemento no existe o cuando deseas eliminar más de un elemento a la vez. Elegir el método correcto evita errores y deja clara tu intención a quienes lean tu código.
Este capítulo cubre:
discard()— elimina un elemento, sin error si no está presenteremove()— elimina un elemento, lanzaKeyErrorsi no está presentepop()— elimina y devuelve un elemento arbitrarioclear()— elimina todos los elementos, dejando un set vacíodifference_update()— elimina múltiples elementos en una sola llamada- Eliminación condicional con un bucle y con comprensiones de set
Si eres nuevo en los sets, lee primero Python Sets. Para agregar elementos a un set, consulta Add Set Items.
El Método discard()
discard() elimina el elemento especificado del set. Si el elemento no está presente, el método no hace nada — no se lanza ninguna excepción. Es la opción más segura cuando no estás seguro de si el elemento existe.
Sintaxis
set.discard(element)element— el valor a eliminar.- Valor de retorno:
None. El set se modifica en su lugar.
Eliminar un elemento presente
Descartar un elemento que existe en el set
Descartar un elemento ausente es seguro
fruits = {'apple', 'banana', 'cherry'}
fruits.discard('mango') # 'mango' is not in the set
print(fruits)
# {'apple', 'banana', 'cherry'} — unchanged, no errorEsto hace que discard() sea ideal en bucles donde no puedes tener certeza de que cada elemento que deseas eliminar esté presente.
El Método remove()
remove() también elimina un único elemento, pero lanza un KeyError si el elemento no se encuentra. Úsalo cuando el elemento debe existir — el error actúa como una advertencia temprana de que algo está mal.
Sintaxis
set.remove(element)- Valor de retorno:
None. El set se modifica en su lugar.
Eliminar un elemento presente
Eliminar un elemento de un set en Python
Intentar eliminar un elemento ausente lanza KeyError
fruits = {'apple', 'banana', 'cherry'}
fruits.remove('mango')
# KeyError: 'mango'Si deseas evitar el error pero seguir usando remove(), protege la llamada con una verificación in, o cambia a discard():
element = 'mango'
if element in fruits:
fruits.remove(element)discard() vs remove() — Diferencias Clave
discard() | remove() | |
|---|---|---|
| Elemento presente | Lo elimina | Lo elimina |
| Elemento ausente | No hace nada | Lanza KeyError |
| Usar cuando | La eliminación es opcional | El elemento debe existir |
El Método pop()
pop() elimina un elemento arbitrario del set y lo devuelve. Dado que los sets no tienen orden, no puedes predecir qué elemento se eliminará — depende del diseño interno de la tabla hash, no del orden de inserción.
Sintaxis
removed = set.pop()- Valor de retorno: el elemento eliminado.
- Lanza
KeyErrorsi el set está vacío.
Extraer un elemento de un set en Python
pop() en un set vacío lanza KeyError
empty = set()
empty.pop()
# KeyError: 'pop from an empty set'Protégete de esto con una simple verificación de longitud:
if fruits:
item = fruits.pop()Cuándo usar pop()
pop() es útil cuando necesitas procesar y consumir elementos uno a la vez y no te importa el orden — por ejemplo, al vaciar una cola de trabajo almacenada como un set.
El Método clear()
clear() elimina todos los elementos del set, dejándolo vacío. El objeto set en sí sigue existiendo; solo desaparece su contenido.
Sintaxis
set.clear()- Valor de retorno:
None.
Limpiar un set en Python
set() es la forma en que Python muestra un set vacío. Python no puede usar {} para un set vacío porque esa notación ya significa un diccionario vacío.
El Método difference_update()
difference_update() elimina cada elemento de un iterable dado del set, en una sola llamada. Es el equivalente en el lugar del operador - (diferencia).
Sintaxis
set.difference_update(iterable)iterable— un set, lista, tupla o cualquier otro iterable cuyos elementos deseas eliminar.- Los elementos del iterable que no están en el set se ignoran silenciosamente.
- Valor de retorno:
None. El set se modifica en su lugar.
Eliminar múltiples elementos a la vez
numbers = {1, 2, 3, 4, 5}
numbers.difference_update({2, 4})
print(numbers)
# {1, 3, 5}Compara esto con crear un nuevo set con el operador -, que deja el original sin cambios:
numbers = {1, 2, 3, 4, 5}
result = numbers - {2, 4} # new set, 'numbers' is not modified
print(result) # {1, 3, 5}
print(numbers) # {1, 2, 3, 4, 5}Usa difference_update() cuando quieras mutar el set existente; usa - cuando necesites un nuevo set y desees conservar el original.
Eliminar Múltiples Elementos con un Bucle
Cuando los elementos a eliminar no se conocen de antemano, recógelos primero y luego llama a discard() en un bucle. No modifiques un set mientras iteras sobre él — eso lanza un RuntimeError.
Patrón correcto — recoger candidatos primero, luego eliminar
fruits = {'apple', 'banana', 'cherry', 'avocado'}
# Step 1: collect elements to remove (do NOT modify the set here)
to_remove = [item for item in fruits if item.startswith('a')]
# Step 2: remove them
for item in to_remove:
fruits.discard(item)
print(fruits)
# {'banana', 'cherry'}Filtrar con una Comprensión de Set
Si deseas conservar solo los elementos que cumplen una condición, una comprensión de set produce un nuevo set y deja el original intacto:
Conservar solo los números pares
nums = {1, 2, 3, 4, 5, 6}
evens = {x for x in nums if x % 2 == 0}
print(evens)
# {2, 4, 6}Esto es preferible cuando necesitas preservar el set original o asignar el resultado a una nueva variable. Para sets grandes, también resulta ligeramente más legible que mutar en su lugar.
Consulta Loop Sets para más patrones de iteración sobre sets.
Referencia Rápida de Métodos
| Método | Elimina | Elemento ausente | Devuelve |
|---|---|---|---|
discard(x) | Elemento x | Ignorado | None |
remove(x) | Elemento x | KeyError | None |
pop() | Elemento arbitrario | KeyError (si está vacío) | Elemento eliminado |
clear() | Todos los elementos | n/a | None |
difference_update(it) | Todos los elementos en it | Ignorado | None |
Para una referencia completa de todos los métodos de set, consulta Set Methods. Para aprender a iterar sobre un set, consulta Loop Sets.