Objetivo: implementar los conceptos de subconjuntos y conjuntos disjuntos en Python.
Vamos a ir concluyendo el tema de los conjuntos, que tengo interés en presentar pronto otra de las superestructuras fabulosas de Python, los diccionarios.
La teoría nos dice que A es subconjunto de B cuando A está incluido en B, que es lo mismo que decir que B contiene a A.
Para implementar estos conceptos en Python, disponemos de los operadores de comparación habituales:
== igual
!= distinto
> mayor
>= mayor o igual
< menor
<= menor o igual
A es un subconjunto de B cuando todos los elementos de A están incluidos en B, relación que expresamos por
A <= B
que es equivalente a
B >= A
Puede interesarte también la inclusión estricta:
A < B
, que es lo mismo que decir B > A
Practiquemos estos operadores con los siguientes conjuntos:
>>> c1 = {1, 2, 3}
>>> c2 = {1, 2, 3}
>>> c3 = {1, 2, 3, 4, 5, 6}
>>> c4 = {2, 4, 6}
>>> c5 = {1, 3, 5}
Observa que c1 y c2 son iguales, pues contienen los mismos elementos
>>> c1 == c2
True
pero c2 y c3 no lo son:
>>> c2 != c3
True
Sin embargo, c2 es un subconjunto de c3, pues todos los elementos de aquel están incluidos en este:
>>> c2 <= c3
True
A su vez, c1 es un subconjunto de c2, aunque sean iguales:
>>> c1 <= c2
True
Pero no lo sería en sentido estricto:
>>> c1 < c2
False
El concepto de subconjunto también está disponible como método:
>>> c1.issubset(c3)
True
que debe leerse como c1 es subconjunto de c3,
y es lo mismo que
c1 <= c3
También puedes expresarlo del siguiente modo:
>>> c3.issuperset(c1)
True
que debes leerlo como c3 es superconjunto de c1, que es lo mismo que decir que c3 contiene a c1:
c3 >= c1
Para finalizar, unas palabras sobre el concepto de conjuntos disjuntos. Sabemos que dos conjuntos son disjuntos cuando no tienen elementos en común, es decir, su intersección es el conjunto vacío.
En el artículo anterior tratamos la intersección, así que ya tenemos recursos para practicar esto sobre los conjuntos c4 y c5, que como puedes observar, son disjuntos:
>>> c4 & c5 == set()
True
Recuerda que set()
simboliza el conjunto vacío, y no {}
, que sería un diccionario vacío, como veremos muy pronto.
Pero esta instrucción podría prestarse a error fácilmente: el uso de set()
o el orden de evaluación de los operadores.
¿Qué tal esta otra, más sencilla?
>>> c4.isdisjoint(c5)
True
Se acerca el final del repaso que le estamos dando a los conjuntos en Python. En la próxima entrega presentaremos el tipo frozenset, conjunto congelado, que es como el tipo set, pero inmutable.
Qué trascendente ha sonado esta última palabra; me está entrando hasta frío…
Javier Montero Gabarró
El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)
El Club del Autodidacta
Consulta el índice completo de artículos relacionados con Python.