c1 = {4, 1, 8, 0, 4, 20}
c2 = {'z', 'x', 'g', 'a', 'k', 'x'}
c3 = {'a', 1.5, 3, 5+4j, (1,2,3)}Apéndice K — Conjuntos.
Objetivo. Describir la estructura de datos set mediante la exposición de ejemplos.
K.1 Introducción
Recordemos los cuatro tipos de colecciones que se tienen en Python:
| Tipo | Ordenada | Inmutable | Indexable | Duplicidad |
|---|---|---|---|---|
| List | SI | NO | SI | SI |
| Tuple | SI | SI | SI | SI |
| Sets | NO | NO | NO | NO |
| Dict | NO | NO | SI | NO |
K.2 Conjuntos
- Consisten en una secuencia NO ordenada y mutable.
- NO permite miembros duplicados.
- Los elementos de los conjuntos NO se pueden indexar.
- Los conjuntos se definen usando llaves (
{}) y comas (,) para separar sus elementos.
Creamos los conjuntos:
print(type(c1), c1)
print(type(c2), c2)
print(type(c3), c3)<class 'set'> {0, 1, 4, 20, 8}
<class 'set'> {'k', 'g', 'x', 'z', 'a'}
<class 'set'> {1.5, (5+4j), 3, (1, 2, 3), 'a'}
Observa que los conjuntos c1 y c2 contienen en su definición elementos repetidos, pero posteriormente cuando se usa o se imprime el conjunto, los elementos repetidos se eliminan.
K.3 Funciones incorporadas que operan sobre conjuntos.
Prácticamente todas las funciones incorporadas que se aplican a las listas y tuplas, se pueden aplicar a los conjuntos, por ejemplo:
print(len(c1))
print(max(c1))
print(min(c1))
print(all(c1))
print(any(c1))
print(sorted(c1))
print(sum(c1))5
20
0
False
True
[0, 1, 4, 8, 20]
33
list(enumerate(c1)) [(0, 0), (1, 1), (2, 4), (3, 20), (4, 8)]
list(zip(c1, c2)) [(0, 'z'), (1, 'g'), (4, 'x'), (20, 'a'), (8, 'k')]
K.4 Métodos de los conjuntos.
En términos de Programación Orientada a Objetos, la clase <class 'set'> define una serie de métodos que se pueden aplicar sobre los objetos del tipo set. Veamos algunos ejemplos:
print(c1) # Conjunto original
c1.add(-8) # Adiccionar un elemento
print(c1) # Revisamo el estado del conjunto{0, 1, 4, 20, 8}
{0, 1, 4, 20, 8, -8}
print(c1) # Conjunto original
c1.remove(4) # Eliminar un elemento del conjunto
print(c1) # Revisamo el estado del conjunto{0, 1, 4, 20, 8, -8}
{0, 1, 20, 8, -8}
Si el elemento que se desea eliminar del conjunto no existe dentro del mismo, entonces se obtiene un error al tratar de eliminar dicho elemento:
c1.remove(4)--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[10], line 1 ----> 1 c1.remove(4) KeyError: 4
A un conjunto que ya existe se le pueden eliminar todos sus elementos:
# Estado inicial del conjunto
print(c1, type(c1), id(c1))
c1.clear() # Limpiar todos los elementos del conjunto
print(c1, type(c1), id(c1)){0, 1, 20, 8, -8} <class 'set'> 1934565229280
set() <class 'set'> 1934565229280
Observa que el identificador no ha cambiado, solo se eliminaron todos los elementos.
Para saber si un elemento está en el conjunto podemos usar in:
# Definimos el conjuntos
test = {1,2,3,'a','b','c'}
print('Conjunto original:', test)
# elemento a eliminar
elemento = -8
print(f"Elemento a eliminar: {elemento}")
# Algoritmo de verificación
if elemento in test:
test.remove(elemento)
print(f"El elemento '{elemento}' ha sido removido del conjunto")
else:
print(f"El elemento '{elemento}' no está en el conjunto")
print('Resultado final:', test)Conjunto original: {1, 2, 3, 'b', 'a', 'c'}
Elemento a eliminar: -8
El elemento '-8' no está en el conjunto
Resultado final: {1, 2, 3, 'b', 'a', 'c'}
K.5 Operadores sobre conjuntos
Se pueden realizar las operaciones de conjuntos definidas en matemáticas en los objetos de tipo set.
# Definimos dos conjuntos
A = {'Taza', 'Vaso', 'Mesa'}
B = {'Casa', 'Mesa', 'Silla'}
print(A)
print(B){'Mesa', 'Vaso', 'Taza'}
{'Mesa', 'Silla', 'Casa'}
K.5.1 in: revisar si un elemento está en el conjunto.
'Taza' in ATrue
K.5.2 -: elementos en A, pero no en B.
A - B {'Taza', 'Vaso'}
K.5.3 |: elementos en A o en B o en ambos.
A | B {'Casa', 'Mesa', 'Silla', 'Taza', 'Vaso'}
K.5.4 &: elementos en ambos conjuntos.
A & B {'Mesa'}
K.5.5 ^ : elementos en A o en B, pero no en ambos.
A ^ B {'Casa', 'Silla', 'Taza', 'Vaso'}
K.6 Copiando conjuntos
Para crear un nuevo conjunto a partir de otro, usamos operaciones similares que para las listas:
K.6.1 Copiando con el método copy()
c4 = c2.copy()
print(c2, type(c2), id(c2))
print(c4, type(c4), id(c4)){'z', 'g', 'x', 'a', 'k'} <class 'set'> 1934565230176
{'z', 'g', 'x', 'a', 'k'} <class 'set'> 1934571604224
K.6.2 Copiando con la biblioteca copy()
import copy
c5 = copy.copy(c2)
print(c2, type(c2), id(c2))
print(c5, type(c5), id(c5)){'z', 'g', 'x', 'a', 'k'} <class 'set'> 1934565230176
{'z', 'g', 'x', 'a', 'k'} <class 'set'> 1934571605568