Conjuntos en Python

miércoles, 25 de junio de 2008

Como en Python todo es un objeto, los conjuntos no son la excepcion. A traves de métodos, podremos operar entre conjuntos.

Todo lo que esté con el símbolo indica que no es necesario leerlo, pero puede resultar interesante para aquellos que no saben en que consiste cada operacion.

Declaración

Primero, ¿como declaramos un conjunto?
En python, cualquier objeto iterable lo podemos "transformar" en un conjunto.

>>> T = (1,2,3,4,5,5)
>>> conjuntoT = set(T) #Con set() definimos el conjunto
>>> conj
untoT
set([1, 2, 3, 4, 5])

>>> L = [1,2,3,4,5,5]
>>> conjuntoL = set(L)
>>> conjuntoL

set([1, 2, 3, 4, 5])


>>> C = 'Hola Mundo'
>>> conjuntoC = set(C)

>>> conjuntoC

set([
'a', ' ', 'd', 'H', 'M', 'l', 'o', 'n', 'u'])


Por definicion de la teoría de conjuntos los elementos perteneciente a un conjunto no se re repiten, fijense en los dos primeros casos en T y L se repite el 5 y en conjuntoT y conjuntoL, solo hay un 5. Lo mismo pasa en el tercer ejemplo.


Unión
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])
>>> A|B
set([1, 2, 3, 4, 5, 6, 7])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La unión de conjuntos A y B (se denota AB)consiste en un nuevo conjunto el cual contiene todos los elementos A y B.

Tambien podría haberse hecho A.union(B)

Interseccion
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])
>>> A&B

set([3, 4, 5])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La intersección de conjuntos A y B (se denota A B) consiste en un nuevo conjunto el cual contiene todos los elementos que tengan en común A y B.

Tambien podría haberse hecho A.intersection(B)

Diferencia
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])

>>> A-B
set([1, 2])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La diferencia entre un conjuntos A y B (se denota A-B) consiste en un nuevo conjunto el cual contiene todos los elementos de A y que no pertenezcan a B.

Tambien podría haberse hecho A.difference(B)


Diferencia Simétrica
>>> A = set([1,2,3,4,5])
>>> B =
set([3,4,5,6,7])
>>> A^B

set([1, 2, 6, 7, 8])


Definición: Dado un conjuto A y un conjuto B cualquiera. La diferencia simétrica de conjuntos A y B (se denota A Δ B) consiste en un nuevo conjunto el cual contiene todos los elementos de A y B que no tengan en comun.

Tambien podría haberse hecho A.symmetric_difference(B)

¿Es subconjunto?
>>> B = set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> A = set([1,2,3,4,5])
>>> A.issubset(B)
True
>>> B.issubset(A)
False


Definición: Un conjuto A es subconjunto de B cuando todos los elementos de A tambien pertenecen a B.


¿Es superconjunto?
>>> B = set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> A = set([1,2,3,4,5])
>>> B.issuperset(A)
True
>>> A.issuperset(B)
False


Definición: Un conjunto B es superconjunto de A si y solo si A es subconjunto de B


Pertenencia
>>> A = set([1,2,3,4,5])
>>> 1 in A
True
>>> 1 not in A
False
>>> 10 in A
False
>>> 10 not in A
True


Definición: Matemáticamente no tiene una definición, pero podemos decir que es un termino que usamos para saber si un elemento está o no dentro de un conjunto.


Las operaciones las hicimos entre dos conjuntos, pero podemos operar con la cantidad de conjuntos que querramos.
Hasta acá las operaciones definidas por la teoría conjuntista, pero tambien existen otras en Python para hacer mas fácil la programación.

Agregar un elemento al conjunto
>>> A = set([1,2,3,4,5])
>>> A.add(0)
>>> A
set([0, 1, 2, 3, 4, 5])


Quitar un elemento al conjunto
>>> A = set([0,1,2,3,4,5])
>>> A.discard(2)
>>> A
set([0, 1, 3, 4, 5])


Quitar todos los elementos de un conjunto
>>> A = set([0,1,2,3,4,5])
>>> A.clear()
>>> A
set([])


Copiar un conjunto
>>> B = A #acá decimos que B es igual a A, por lo que cualquier cambio en A tambien se producirá en B y viceversa
>>> B
set([1, 2, 3, 4, 5])
>>> A
set([1, 2, 3, 4, 5])
>>> B.add(987)
>>> B
set([1, 2, 3, 4, 5, 987])
>>> A
set([1, 2, 3, 4, 5, 987])


Probablemente no querramos que pase eso, para resolver este problema existe el método .copy()
-----------------------------------------------

>>> A = set([1,2,3,4,5])
>>> B=A.copy()
>>> B
set([1, 2, 3, 4, 5])
>>> A
set([1, 2, 3, 4, 5])
>>> B.add(987)
>>> B
set([1, 2, 3, 4, 5, 987])
>>> A
set([1, 2, 3, 4, 5])


.update
A.intersection_update(B) equivale a hacer A = A & B o A &= B

A.defference_update(B) equivale a hacer A = A -B o A -= B

A.symmetric_difference_update(B) equivale a hacer A = A ^B o A^=B

A.update(B) equivale a hacer A = A | B o A |= B

4 Comments:

jeasoft said...

Hey hermano, saludos, déjame decirte que este pequeño articulo es fantástico, quizás algo simple, pero hay cosas que había olvidado desde cuando estaba en la escuela.

Bueno, tengo también una pequeña corrección, y es en la parte donde explicas la diferencia simétrica, que dice intersección.

En estos momentos estoy aprendiendo Python, y aunque no lo creas estos pequeños articulos ayudan. Quisiera saber tambien si licencias tus articulos con alguna licencia libre o para dominio público, para hacer pegar alguno que otro en mi blog (claro, haciendo referencia de donde vino este).

Un saludo desde República Dominicana.

__OVERFLOW__ said...

Jeasoft, gracias por la correcion.
No tengo licencia porque la verdad no tengo idea de como licenciarlas. Sentite libre de hacer lo que quieras con el artículo siempre y cuando almenos menciones de quién salió.
Me algro de haber podido ayudarte.
Saludos.
PD: si querés, pasame tu blog.

Anónimo said...

Muchas gracias por el articulo, andaba pensando como eliminar elementos repetidos de una lista pero con el conjunto no pasa eso xD

TGS said...

muy buen aporte amigo gracias