Objetivo: aprender a agregar y eliminar elementos de un conjunto en Python.
Pongámonos al día. En Introducción a los conjuntos presentamos el tipo set para almacenar conjuntos. Aprendimos a crearlos, tanto un conjunto vacío, como con datos preexistentes. Vimos también cómo comprobar si un determinado elemento pertenece o no al conjunto, así como determinar la cardinalidad, es decir, el número de elementos en total.
Con estos conceptos claros, es momento de aprender a realizar otras operaciones básicas, como la agregación y eliminación de elementos a conjuntos ya existentes.
Comencemos creando un par de conjuntos sobre los que trabajaremos:
>>> c1 = set() # El conjunto vacío
>>> c2 = {1, 2, 3, 4, 5, 6}
Para añadir elementos a un conjunto disponemos del método add.
Por ejemplo,
>>> c1.add('pimiento')
>>> c1
{'pimiento'}
Para agregar elementos a un conjunto hemos de hacerlo de uno en uno. Si intentaras meter varios de golpe se produciría una excepción.
>>> c1.add(5)
>>> c1
{'pimiento', 5}
Observa, tras esta última operación, que los elementos pueden ser de tipos variados dentro del mismo conjunto.
Fíjate en esta otra instrucción:
>>> c2.add((7, 8))
¿No hemos dicho que no se podía introducir más que un elemento cada vez?
En efecto, así es. Pero date cuenta de que no hemos introducido dos elementos, sino sólo uno: la tupla (1, 2). Observa los paréntesis.
>>> c2
{1, 2, 3, 4, 5, 6, (7, 8)}
Si no te fías, comprueba la cardinalidad:
>>> len(c2)
7
en lugar de 8.
Como vemos, agregar elementos a un conjunto es una labor simple. Borrarlos es igual de sencillo, pero nos ofrece más variedad de opciones.
Quizás no te guste tener que retirar elementos de un conjunto. Si prefieres, puedes dejar que Python se ocupe por ti de la difícil decisión empleando el método pop.
>>> c2.pop()
1
El método pop no sólo elmina un elemento, sino que además nos presenta cuál ha retirado del conjunto. No debe llevar argumentos.
>>> c2
{2, 3, 4, 5, 6, (7, 8)}
>>> c2.pop()
2
>>> c2
{3, 4, 5, 6, (7, 8)}
¿Adivinas cuál será el siguiente a extraer?
>>> c2.pop()
3
Pero no te confundas… Aunque podamos predecirlo fácilmente en este caso, considera mejor que Python te devolverá un valor arbitrario. Piensa que los elementos de un conjunto no tienen orden, aunque internamente Python pueda implementarlos de acuerdo a su propio criterio. Observa el siguiente ejemplo:
>>> c3 = {'luis', 'pedro', 'juan'}
Presta atención al orden en que han sido introducidos. Ahora observa cómo te muestra Python el conjunto:
>>> c3
{'luis', 'juan', 'pedro'}
No coincide con el orden de introducción. Ni siquiera están por orden alfabético.
Si ahora hago un pop sé que extraerá a ‘luis’, el elemento primero en ese orden peculiar, pero eso no es fácilmente deducible a partir de los datos iniciales.
>>> c3.pop()
'luis'
Lo dicho: considerara que el valor que extrae pop es completamente arbitrario.
¿Qué utilidad puede tener extraer un elemento arbitrario de un conjunto?
Imagínate que los tres amigos de antes, Luis, Pedro y Juan, han quedado a tomar unas cervezas. Llega el momento de rascarse el bolsillo y nadie parece decidirse a pagar. Mete a los tres en un conjunto y deja que Python decida…
Pero, aunque la elección es arbitraria, te recomiendo que no emplees pop si lo que de verdad buscas es aleatoriedad. Hay otras maneras más justas de hacerlo.
Para eliminar un elemento concreto de un conjunto, usa el método remove:
>>> c2.remove(5)
>>> c2
{4, 6, (7, 8)}
Pero ten mucho cuidado: si el elemento no existe te devolverá un error.
>>> c2.remove(2)
Traceback (most recent call last):
File "<pyshell#58>", line 1, in <module>
c2.remove(2)
KeyError: 2
Si no quieres correr ese riesgo, existe el método discard, que elimina un elemento sólo en el caso de que exista.
>>> c2.discard((7, 8)) # Eliminando la tupla (7,8)
>>> c2
{4, 6}
>>> c2.discard(2)
>>> c2
{4, 6}
Para hacer limpieza completa de un conjunto, sin remordimiento alguno, disponemos del método clear:
>>> c2.clear()
>>> c2
set()
Recuerda, por el artículo anterior, que el conjunto vacío se representa por set()
, en vez de {}
, que correspondería a un diccionario vacío.
Hemos colocado nuevas piezas sobre el puzzle. En el próximo artículo veremos cómo gestionar operaciones sobre conjuntos de toda la vida como la unión y la intersección.
Javier Montero Gabarró
Python – Agregación y eliminación de elementos de un conjunto
El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)
El Club del Autodidacta
Consulta el índice completo de artículos relacionados con Python.