Set
Los sets en Python son una estructura de datos usada para
almacenar elementos de una manera similar a las listas, pero
con ciertas diferencias.
Crear set Python
Los set en Python son un tipo que permite almacenar varios
elementos y acceder a ellos de una forma muy similar a las
listas pero con ciertas diferencias:
Los elementos de un set son único, lo que significa que
no puede haber elementos duplicados.
Los set son desordenados, lo que significa que no
mantienen el orden de cuando son declarados.
Sus elementos deben ser inmutables.
Para entender mejor los sets , es necesario entender ciertos
conceptos matemáticos como la teoría de conjuntos.
Para crear un set en Python se puede hacer con set() y
pasando como entrada cualquier tipo iterable, como puede
ser una lista. Se puede ver como a pesar de pasar elementos
duplicados como dos 8 y en un orden determinado, al
imprimir el set no conserva ese orden y los duplicados se han
eliminado.
s = set([5, 4, 6, 8, 8, 1])
print(s) #{1, 4, 5, 6, 8}
print(type(s)) #<class 'set'>
Se puede hacer lo mismo haciendo uso de {} y sin usar la
palabra set() como se muestra a continuación.
s = {5, 4, 6, 8, 8, 1}
print(s) #{1, 4, 5, 6, 8}
print(type(s)) #<class 'set'>
Operaciones con sets
A diferencia de las listas, en los set no podemos modificar un
elemento a través de su índice. Si lo intentamos, tendremos
un TypeError .
s = set([5, 6, 7, 8])
#s[0] = 3 #Error! TypeError
Los elementos de un set deben ser inmutables, por lo que
un elemento de un set no puede ser ni un diccionario ni una
lista. Si lo intentamos tendremos un TypeError
lista = ["Perú", "Argentina"]
#s = set(["México", "España", lista]) #Error! TypeError
Los sets se pueden iterar de la misma forma que las listas.
s = set([5, 6, 7, 8])
for ss in s:
print(ss) #8, 5, 6, 7
Con la función len() podemos saber la longitud total del set .
Como ya hemos indicado, los duplicados son eliminados.
s = set([1, 2, 2, 3, 4])
print(len(s)) #4
También podemos saber si un elemento está presente en un
set con el operador in . Se el valor existe en el set, se
devolverá True .
s = set(["Guitarra", "Bajo"])
print("Guitarra" in s) #True
Los sets tienen además diferentes funcionalidades, que se
pueden aplicar en forma de operador o de método. Por
ejemplo, el operador | nos permite realizar la unión de dos
sets, lo que equivale a juntarlos. El equivalente es el
método union() que vemos a continuación.
s1 = set([1, 2, 3])
s2 = set([3, 4, 5])
print(s1 | s2) #{1, 2, 3, 4, 5}
Métodos sets
[Link](<elem>)
El método add() permite añadir un elemento al set .
l = set([1, 2])
[Link](3)
print(l) #{1, 2, 3}
[Link](<elem>)
El método remove() elimina el elemento que se pasa como
parámetro. Si no se encuentra, se lanza la excepción KeyError .
s = set([1, 2])
[Link](2)
print(s) #{1}
[Link](<elem>)
El método discard() es muy parecido al remove() , borra el
elemento que se pasa como parámetro, y si no se encuentra
no hace nada.
s = set([1, 2])
[Link](3)
print(s) #{1, 2}
[Link]()
El método pop() elimina un elemento aleatorio del set .
s = set([1, 2])
[Link]()
print(s) #{2}
[Link]()
El método clear() elimina todos los elementos de set .
s = set([1, 2])
[Link]()
print(s) #set()
Otros
Los sets cuentan con una gran cantidad de métodos que
permiten realizar operaciones con dos o más, como
la unión o la intersección.
Podemos calcular la unión entre dos sets usando el
método union() . Esta operación representa la “mezcla” de
ambos sets. Nótese que el método puede ser llamado con
más parámetros de entrada, y su resultado será la unión de
todos los sets.
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print([Link](s2)) #{1, 2, 3, 4, 5}
También podemos calcular la intersección entre dos o más
set. Su resultado serán aquellos elementos que pertenecen a
ambos sets.
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print([Link](s2)) #{3}
Los set en Python tiene gran cantidad de métodos, por lo que
lo dejaremos para otro capítulo, pero aquí os dejamos con un
listado de ellos:
[Link](s2[, s3 ...])
[Link](s2[, s3 ...])
[Link](s2[, s3 ...])
s1.symmetric_difference(s2)
[Link](s2)
[Link](s2)
[Link](s2)
[Link](s2[, s3 ...])
s1.intersection_update(s2[, s3 ...])
s1.difference_update(s2[, s3 ...])
s1.symmetric_difference_update(s2)