Bienvenidos sean a este post, hoy veremos los dos tipo de sets que dispone python.
Set
Este tipo de set es mutable, lo cual nos permitira modificarlo despues de haber sido creado y ella es una coleccion de objetos inmutables, aunque posee una caracteristica llamada Hashability lo cual nos permite utilizar al dato tanto como clave como dato en un diccionario pero esto es algo que veremos proximamente pero segun la documentacion oficial:
Un objeto puede ser «hashable» si su valor de hash no cambia nunca durante su vida y podemos compararlos con otros objetos
Guido van Rossum
Justamente la caracteristica «Hashability» permite utilizar al objeto como una clave de diccionario (dictionary) y un miembro de set porque estas estructuras de datos usan el valor hash internamente, con todo esto podemos decir que los objetos internos inmutables de python son «hashable» mientras que los contenedores mutables no lo son, por esta razon todos los objetos que se comparan igualmente deben tener el mismo valor de hash y los sets son usados comunmente para chequear las membresias, veamos el siguiente ejemplo:
>>> conjunto_a = set()
Este comando iniciara un set nuevo llamado conjunto_a pero en blanco, nuestro siguiente paso sera agregar unos datos a este conjunto:
>>> conjunto_a.add(1)
>>> conjunto_a.add(2)
>>> conjunto_a.add(3)
>>> conjunto_a.add(5)
>>> conjunto_a
{1, 2, 3, 5}
>>>
En este caso vemos que agregamos cuatro valores, para finalmente mostrar los valores almacenados en el set, como pueden ver con simplemente la funcion add agregamos valores, ahora vamos a ver como removerlos:
>>> conjunto_a.remove(1)
>>> conjunto_a
{2, 3, 5}
>>>
Para hacer esta accion utilizamos la funcion remove y le pasamos el valor que deseamos remover, si lo chequeamos podemos ver como ha funcionado correctamente, vamos a probar de agregar un valor existente para ver que sucede:
>>> conjunto_a.add(3)
>>> conjunto_a
{2, 3, 5}
>>>
Si intentamos agregar un valor que ya existe esta accion no se realizara porque no se permiten duplicados y esto nos es util para ciertas circunstancias, para nuestro siguiente ejemplo veremos como trabajar con in:
>>> 3 in conjunto_a
True
>>> 4 in conjunto_a
False
>>>
Para poder utilizarlo deben informar primero el valor a buscar en el set, en el primer caso pasamos el numero 3 luego in y el set, como el numero 3 existe nos devuelve un True, en cambio en el segundo caso el valor 4 al no existir en conjunto_a nos devuelve un False, por ultimo veremos unos operadores para trabajar con varios sets, para ello primero crearemos un nuevo set:
>>> conjunto_b = set([5, 7, 11, 13])
Esta es una forma mas practica y rapida para crear un nuevo set, pasemos a ver el primero de los operadores:
>>> conjunto_a | conjunto_b
{2, 3, 5, 7, 11, 13}
>>>
El operador utilizado aca se llama operador de union (|) y como pueden ver nos concatena los dos conjuntos o sets que informemos, pasemos al siguiente operador:
>>> conjunto_a & conjunto_b
{5}
>>>
Este es el operador de interseccion y nos devolvera cual es el valor donde se intercruzan ambos conjuntos, en caso de existir, y como se ve en nuestro caso nos devolvio el valor 5, veamos el ultimo operador:
>>> conjunto_a - conjunto_b
{2, 3}
>>>
Este se llama operador de diferencias y en general tiende a resolver los elementos del primer conjunto que no esten en el segundo conjunto, por esta razon nos devolvio los primeros dos numeros, por ultimo veamos una forma practica de crear nuestros sets:
>>> conjunto_a = {2, 3, 5, 3, 5}
>>> conjunto_a
{2, 3, 5}
>>>
La forma mas practica es por medio de las llaves, si observan cuando genere el set repeti varios numeros pero al momento de mostrarlo vemos que los numeros repetidos desaparecieron dado que set no permite valores duplicados, pasemos al siguiente tipo.
Frozenset
A diferencia de set este tipo es inmutable, tambien es una coleccion de objetos inmutables pero como dijimos antes este al ser inmutable no podremos modificarlo una vez definido, veamos un ejemplo y para ello primero crearemos dos frozenset:
>>> conjunto_a = frozenset([2, 3, 5])
>>> conjunto_b = frozenset([5, 7, 11])
>>>
Creamos dos conjuntos por medio de frozenset y les estableceremos unos valores, nuestro siguiente paso sera intentar agregar un valor en uno de los conjuntos:
>>> conjunto_a.add(11)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>>
Observen que nos devuelve un error porque no posee la posibilidad de agregar un nuevo valor, lo mismo sucede si intentamos remover un valor pero que sucedera si usamos el operador de interseccion? veamos el siguiente ejemplo:
>>> conjunto_a & conjunto_b
frozenset({5})
>>>
Como pueden ver funciono y todos los operadores de este estilo funcionaran correctamente porque en este caso no afectan a los frozensets sino que generan un tercero y el resultado de la operacion se almacena ahi, entonces podemos decir que este tipo de datos no se pueden modificar internamente pero si se pueden operar entre dos tipos iguales.
En resumen, hoy hemos visto como son los dos tipos set disponibles en python, hemos visto como es el tipo set, sus propiedades, funciones que podemos utilizar para manejarlo, operadores que nos permiten crear un resultado entre ellos, despues hemos visto el tipo frozenset, este al ser inmutable no podra ser modificado por ninguna de las funciones pero si podemos usar los operadores para crear un nuevo resultado, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
