En el lenguaje Python existen los llamados conjuntos o sets, los mismos conjuntos que vemos en matemáticas (en matemáticas discretas, sobre todo) y a los que les hacemos operaciones como unión, intersección, complemento y todo ello.
Python permite hacer operaciones con conjuntos de una manera fácil y sencilla.
Justamente hoy veremos eso: cómo trabajar con conjuntos (set) en Python. Recuerda que debes instalar y configurar Python si quieres ejecutar los ejercicios.
Nota: también puedes instalar Python en Android.
En el post voy a usar set y conjunto de manera intercambiable. Es decir, me voy a referir a lo mismo tanto si digo set como si digo conjunto; esto para evitar repetir la misma palabra.
Para crear un conjunto lo definimos con las llaves {}
o llamamos a la función set
pasándole una lista.
# Usar llaves {}
personajes = {"Walter White", "Hank", "Skyler", "Jesse", "Jane", "Saul"}
print(personajes)
# o llamar a set() pasándole una lista
lenguajes = set(["PHP", "Python", "Go", "Rust", "JavaScript"])
print(lenguajes)
Ambas maneras son válidas, pues al final se obtiene un conjunto. Es hora de ver las operaciones.
Para las operaciones, usaremos los siguientes conjuntos:
animales_terrestres = set(["Tortuga", "Lobo", "Perro", "Cangrejo"])
animales_acuaticos = set(["Tiburón", "Pulpo", "Tortuga", "Cangrejo"])
No sé si esos animales realmente sean acuáticos y terrestres pero por ahora vamos a suponer que sí.
Para obtener la longitud se usa len
, para saber si un elemento existe en una lista se usa in
.
Dos métodos muy útiles son issubset
e issuperset
; el primero ayuda a probar si el primer conjunto es un subconjunto del segundo (o sea, que todos sus elementos estén en el otro) y el segundo prueba lo contrario.
Para copiar un conjunto se llama al método copy
.
La documentación oficial la encuentras aquí.
La unión de conjuntos es cuando unimos dos conjuntos (wow, qué profundo).
Para unir 2 conjuntos llamamos al método union
que cada conjunto tiene. Como argumento pasamos uno o más conjuntos. Aquí el ejemplo:
animales_terrestres = set(["Tortuga", "Lobo", "Perro", "Cangrejo"])
print("Terrestres: ", animales_terrestres)
animales_acuaticos = set(["Tiburón", "Pulpo", "Tortuga", "Cangrejo"])
print("Acuáticos: ", animales_acuaticos)
todos_los_animales = animales_terrestres.union(animales_acuaticos)
print("Unión: ", todos_los_animales)
El conjunto resultante es {‘Tiburón’, ‘Tortuga’, ‘Lobo’, ‘Cangrejo’, ‘Pulpo’, ‘Perro’} porque los repetidos se toman en cuenta una única vez.
También podíamos usar el operador |
(sí, el pipe) así:
todos_los_animales = animales_terrestres | animales_acuaticos
Aunque se recomienda la primera forma, pues es más explícita.
La operación de intersección es cuando creamos un conjunto que se encuentra en ambos conjuntos. Para hacer la operación de intersección llamamos al método intersection
o aplicamos el operador &
, o sea, ampersand.
animales_terrestres = set(["Tortuga", "Lobo", "Perro", "Cangrejo"])
print("Terrestres: ", animales_terrestres)
animales_acuaticos = set(["Tiburón", "Pulpo", "Tortuga", "Cangrejo"])
print("Acuáticos: ", animales_acuaticos)
animales_terrestres_y_acuaticos = animales_terrestres.intersection(
animales_acuaticos)
print("Intersección: ", animales_terrestres_y_acuaticos)
# También usando el operador &
animales_terrestres_y_acuaticos = animales_terrestres & animales_acuaticos
print("Intersección con &: ", animales_terrestres_y_acuaticos)
El resultado de la intersección es {‘Cangrejo’, ‘Tortuga’}.
La diferencia es eliminar del primer conjunto todo lo que no esté en el segundo. Para hacer esta operación se usa el método difference
o el operador -
, así como si estuviéramos restando números.
animales_terrestres = set(["Tortuga", "Lobo", "Perro", "Cangrejo"])
print("Terrestres: ", animales_terrestres)
animales_acuaticos = set(["Tiburón", "Pulpo", "Tortuga", "Cangrejo"])
print("Acuáticos: ", animales_acuaticos)
animales_unicamente_terrestres = animales_terrestres.difference(animales_acuaticos)
print("Diferencia: ", animales_unicamente_terrestres)
# También usando el operador -
animales_unicamente_terrestres = animales_terrestres - animales_acuaticos
print("Diferencia con -: ", animales_unicamente_terrestres)
Así se obtiene un conjunto que tiene lo que hay en el primero pero no en el segundo. En este caso el resultado es:
{‘Lobo’, ‘Perro’}
Para calcular el complemento hacemos una simple diferencia, poniendo un conjunto como el conjunto universal.
Este es un conjunto de elementos que están ya sea en el primero o en el segundo conjunto, pero no en ambos.
Para obtener la diferencia simétrica de dos conjuntos con Python se usa el método symmetric_difference
o el operador ^
.
animales_terrestres = set(["Tortuga", "Lobo", "Perro", "Cangrejo"])
print("Terrestres: ", animales_terrestres)
animales_acuaticos = set(["Tiburón", "Pulpo", "Tortuga", "Cangrejo"])
print("Acuáticos: ", animales_acuaticos)
diferencia_simetrica = animales_terrestres.symmetric_difference(
animales_acuaticos)
print("Diferencia simétrica: ", diferencia_simetrica)
# También usando el operador ^
diferencia_simetrica = animales_terrestres ^ animales_acuaticos
print("Diferencia simétrica con ^: ", diferencia_simetrica)
Como vemos, la diferencia simétrica es lo contrario de la intersección. El resultado es el siguiente:
{‘Pulpo’, ‘Tiburón’, ‘Perro’, ‘Lobo’}
Hay otros operadores que no mencioné, los cuales son >=
que hace lo mismo que issuperset
y <=
que es lo mismo que issubset
.
Aparte de ellos, existe >
que es como usar >=
pero también verifica que los conjuntos no sean iguales. Lo mismo para <
con <=
. Si no entiendes esto último lee el párrafo anterior.
Como siempre, te invito a leer más sobre Python o Matemáticas discretas.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.