Anuncios

Bienvenidos sean a este post, hoy veremos los dos tipo de sets que dispone python.

Anuncios

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
Anuncios

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()
Anuncios

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}
>>>
Anuncios

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}
>>>
Anuncios

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}
>>>
Anuncios

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
>>>
Anuncios

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])
Anuncios

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}
>>>
Anuncios

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}
>>>
Anuncios

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}
>>>
Anuncios

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}
>>>
Anuncios

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.

Anuncios

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])
>>>
Anuncios

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'
>>>
Anuncios

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})
>>>
Anuncios

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.

Anuncios

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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00