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
>>> conjuntoT
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'])
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])
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])
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])
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])
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
¿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
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
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:
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.
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.
Muchas gracias por el articulo, andaba pensando como eliminar elementos repetidos de una lista pero con el conjunto no pasa eso xD
muy buen aporte amigo gracias
Post a Comment