Conjuntos con Python
Esta notebook fue creada originalmente como un blog post por Raúl E. López Briega en Mi blog sobre Python. El contenido esta bajo la licencia BSD.

Introducción
Una característica notable de los seres humanos es su inherente necesidad y capacidad de agrupar objetos de acuerdo a criterios específicos. La idea de la clasificación de ciertos objetos en grupos similares, o conjuntos, es uno de los conceptos más fundamentales de la matemática moderna. La teoría de conjuntos ha sido el marco unificador para todas las matemáticas desde que el matemático alemán Georg Cantor la formulara alrededor de 1870. Ningún campo de las matemáticas podría describirse hoy en día sin hacer referencia a algún tipo de conjunto abstracto. En términos más generales, el concepto de membresía de un conjunto, que se encuentra en el corazón de la teoría de conjuntos, explica cómo sentencias con sustantivos y predicados son formulados en nuestro lenguaje, o en cualquier lenguaje abstracto como las matemáticas. Debido a esto, la teoría de conjuntos está íntimamente ligada a la lógica y sirve de base para todas las matemáticas.
¿Qué es un conjunto?
Un conjunto es una colección de objetos distintos, a menudo llamados elementos o miembros. Existen dos características hacen de los conjuntos algo totalmente distinto a cualquier otra colección de objetos. En primer lugar, un conjunto está siempre “bien definido”, es decir que si realizamos la pregunta ¿Este objeto particular, se encuentra en esta colección?; siempre debe existir una respuesta clara por sí o por no basada en una regla o algunos criterios dados. La segunda característica, es que no hay dos miembros de un mismo conjunto que sean exactamente iguales, es decir, que no hay elementos repetidos. Un conjunto puede contener cualquier cosa imaginable, incluyendo números, letras, colores, incluso otros conjuntos!. Sin embargo, ninguno de los objetos del conjunto puede ser el propio conjunto. Descartamos esta posibilidad para evitar encontrarnos con la Paradoja de Russell, un problema famoso en la lógica matemática desenterrado por el gran lógico británico Bertrand Russell en 1901.
Notación de Conjuntos
Cuando escribimos a los conjuntos utilizamos letras mayúsculas para sus nombres y para representar al conjunto propiamente dicho simplemente listamos sus elementos separándolos por comas y luego englobamos todos estos elementos dentro de un par de llaves. Así, por ejemplo, A = {1,2,3, …, 10} es el conjunto de los 10 primeros números naturales o para contar, B = {Rojo, Azul, Verde} es el conjunto de colores primarios, N = {1,2,3, …} es el conjunto de todos los números naturales, y Z = {…, - 3, -2, -1,0,1,2,3, …} es el conjunto de todos los números enteros. Los puntos suspensivos “…” se utilizan para describir el carácter infinito de los números en los conjuntos N y Z.
También se utiliza el símbolo
Dado que muchos conjuntos no se pueden describir listando todos sus miembros, ya que en muchos casos esto es imposible, también se utiliza la mucho más potente notación de constructor de conjuntos o predicado. En esta notación escribimos el conjunto de acuerdo a qué tipos de objetos pertenecen al conjunto, que se colocan a la izquierda del símbolo “|”, que significa “de tal manera que,” dentro de las llaves; así como las condiciones que estos objetos deben cumplir para pertenecer al conjunto, las cuales se colocan a la derecha de “|” dentro de las llaves. Por ejemplo, el conjunto de los números racionales, o fracciones, que se denota por Q no puede ser descrito por el método de listar todos sus miembros. En su lugar, se define a Q utilizando la notación de predicado de la siguiente manera:
Conjuntos numéricos
Dentro de las matemáticas, los principales conjuntos numéricos que podemos encontrar y que tienen un carácter universal son:
es el conjunto de los números naturales. es el conjunto de los números enteros positivos. es el conjunto de todos los números enteros. y es el conjunto de los números racionales. , es el conjunto de los números reales. Estos son todos los números que pueden ser colocados en una recta numérica unidimensional que se extiende sin fin tanto en negativo como positivo. , es el conjunto de los números irracionales. Algunos de los números más importantes en matemáticas pertenecen a este conjunto,incluyendo y . , es el conjunto de los números complejos. Estos son los números que contienen una parte real y otra parte imaginaria.
Igualdad entre conjuntos
El concepto de igualdad en los conjuntos, difiere levemente del clásico concepto de igualdad que solemos tener. Dos conjuntos A y B se dice que son iguales (expresado por A = B), si y sólo si ambos conjuntos tienen exactamente los mismos elementos. Por ejemplo el conjunto A={1,2,3,4} es igual al conjunto B={4,3,2,1}.
Un conjunto importante, y que todavía no hemos mencionado es el conjunto vacío, el cual no tiene elementos y por tanto no puede ser igualado con ningún otro conjunto. Se expresa con el símbolo
Cardinalidad
La cardinalidad de un conjunto A es el número de elementos que pertenecen a A y lo expresamos como n(A). La cardinalidad de un conjunto puede ser pensada tambien como una medida de su “tamaño”. Si la cardinalidad de un conjunto es un número entero, entonces el conjunto se dice que es finito. De lo contrario, el conjunto se dice que es infinito. Así por ejemplo la cardinalidad del conjunto A={1,2,…,9,10} es 10 y lo expresamos como n(A)=10.
Subconjunto y subconjunto propio
Si todos los elementos de un conjunto A son también elementos de otro conjunto B, entonces A se llama un subconjunto de B y lo expresamos como
- Cualquier conjunto A es un subconjunto de sí mismo. Por lo tanto
. Esto es claramente cierto. - Menos obvio es el hecho de que el conjunto vacío es un subconjunto de cualquier conjunto A. Por lo tanto
. Esta propiedad se prueba a través de la contradicción, ya que si asumimos que existe un conjunto A del que el conjunto vacío no es un subconjunto, entonces esto quiere decir que el conjunto vacío debe contener un elemento que no se encuentra en A y esto es absurdo ya que el conjunto vacío no contiene ningún elemento. - El conjunto vacío es un subconjunto propio de cualquier conjunto A, siempre y cuando A no se también un conjunto vacío.
- Para los conjuntos finitos A y B, si
, entonces . - De forma similar, para los conjuntos finitos A y B, si
, entonces .
Conjunto potencia
El conjunto potencia de un conjunto A, expresado por
Un teorema importante de la teoría de conjuntos establece que si A es un conjunto con k elementos, es decir que n(A) = k; entonces el conjunto potencia de A tiene exactamente
Algebra de conjuntos
El álgebra de conjuntos es el estudio de las operaciones básicas que podemos realizar con los conjuntos. Las operaciones básicas del álgebra de conjuntos son:
-
Unión. La unión de dos conjuntos A y B es el conjunto
que contiene todos los elementos de A y de B. -
Intersección. La intersección de dos conjuntos A y B es el conjunto
que contiene todos los elementos comunes de A y B. -
Diferencia. La diferencia entre dos conjuntos A y B es el conjunto
que contiene todos los elementos de A que no pertenecen a B. -
Complemento. El complemento de un conjunto A es el conjunto
que contiene todos los elementos que no pertenecen a A. -
Producto cartesiano. El producto cartesiano de dos conjuntos A y B es el conjunto
que contiene todos los pares ordenados (a, b) cuyo primer elemento pertenece a A y su segundo elemento pertenece a B.
Conjuntos con Python
Luego de todo este repaso por los fundamentos de la teoría de conjuntos, es tiempo de ver como podemos utilizar a los conjuntos dentro de Python; ya que el lenguaje trae como una de sus estructuras de datos por defecto a los conjuntos. También veremos que podemos utilizar el constructor FiniteSet
que nos proporciona sympy, el cual tiene ciertas ventajas sobre la versión por defecto de Python.
{1, 2, 3}
{'bananas', 'limones', 'manzanas', 'naranjas'}
{'bananas', 'limones', 'manzanas', 'naranjas'}
set()
La cardinalidad del conjunto A = {1, 2, 3} es 3
True
True
True
True
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{4, 5}
{1, 2, 3}
{6, 7, 8, 9, 10}
{1, 2, 3}
{EmptySet(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}
La cardinalidad del conjunto potencia del conjunto C = {1, 2, 3} es 8
True
False
True
True
False
{1, 2, 3, 4, 6}
{2}
{1}
{1, 2} x {3, 4}
(1, 3)
(1, 4)
(2, 3)
(2, 4)
{1, 2, 3, 4} x {1, 2, 3, 4}
{1, 2, 3, 4} x {1, 2, 3, 4} x {1, 2, 3, 4}
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 1, 4)
(1, 2, 1)
(1, 2, 2)
(1, 2, 3)
(1, 2, 4)
(1, 3, 1)
(1, 3, 2)
(1, 3, 3)
(1, 3, 4)
(1, 4, 1)
(1, 4, 2)
(1, 4, 3)
(1, 4, 4)
(2, 1, 1)
(2, 1, 2)
(2, 1, 3)
(2, 1, 4)
(2, 2, 1)
(2, 2, 2)
(2, 2, 3)
(2, 2, 4)
(2, 3, 1)
(2, 3, 2)
(2, 3, 3)
(2, 3, 4)
(2, 4, 1)
(2, 4, 2)
(2, 4, 3)
(2, 4, 4)
(3, 1, 1)
(3, 1, 2)
(3, 1, 3)
(3, 1, 4)
(3, 2, 1)
(3, 2, 2)
(3, 2, 3)
(3, 2, 4)
(3, 3, 1)
(3, 3, 2)
(3, 3, 3)
(3, 3, 4)
(3, 4, 1)
(3, 4, 2)
(3, 4, 3)
(3, 4, 4)
(4, 1, 1)
(4, 1, 2)
(4, 1, 3)
(4, 1, 4)
(4, 2, 1)
(4, 2, 2)
(4, 2, 3)
(4, 2, 4)
(4, 3, 1)
(4, 3, 2)
(4, 3, 3)
(4, 3, 4)
(4, 4, 1)
(4, 4, 2)
(4, 4, 3)
(4, 4, 4)
Además de las aplicaciones que pueden tener los conjuntos de Python en matemáticas, los mismos también pueden ser una estructura de datos poderosa y ayudarnos a resolver varios problemas de programación en forma muy sencilla. A tenerlos en cuenta!
Con esto termino este artículo; espero que les haya gustado y les sea de utilidad.
Saludos!
Este post fue escrito utilizando IPython notebook. Pueden descargar este notebook o ver su version estática en nbviewer.