PyCharm

Pycharm es un fantástico IDE para Python.
Cuenta con versión gratuita y versión de
pago. Tú eliges.
Este es uno de los IDE que utilizo en el curso
Ir a la página de descargaPodemos saber o buscar un elemento en un set con una sintaxis extremadamente corta:
a = {'a', 'b'}
print('a' in a)
Si coincide, el resultado es True, en cambio, si no coincide es False.
True
Por supuesto, puedes utilizar esto con otros tipos de datos, no solo con strings.
Si quieres hacer la búsqueda a la inversa, es decir buscar que un elemento no exista un en un set, añade un not.
a = {1, 2}
print(3 not in a)
Puesto que 3 no está en el set devuelve True.
True
Podemos eliminar fácilmente un elemento del set con remove.
a = {1, 2}
a.remove(1)
print(a)
Se ha eliminado correctamente el valor 1 y nos queda solo el valor 2.
{2}
Lo mismo podemos hacer con discard.
a = {1, 2}
a.discard(1)
print(a)
Hay una diferencia fundamental entre remove() y discard(). Si eliminamos un elemento del set con remove(), lo elimina, pero si intentamos eliminarlo de nuevo, va a dar error porqué no encuentra el elemento.
En cambio, esto no ocurre con discard(), este ignora el error completamente.
a = {1, 2}
a.remove(1)
a.remove(1)
print(a)
Sencillamente, devuelve un error de clave (KeyError), ya que no la encuentra.
Traceback (most recent call last):
File "Ruta del archivo", line X, in
a.remove(1)
KeyError: 1
En cambio a discard, esto le da igual, ignora el fallo:
a = {1, 2}
a.discard(1)
a.discard(1)
print(a)
Se ha eliminado correctamente el valor 1 y nos queda solo el valor 2. Después intenta eliminarlo de nuevo, y al ver que no existe, lo ignora en lugar de devolver un KeyError.
{2}
Podemos añadir nuevos elementos a un set con add():
a = {1, 2}
a.add(3)
print(a)
{1, 2, 3}
Si quieres añadir varios elementos de una sola vez, Puedes utilizar update().
a = {1, 2}
a.add({3, 4, 5, 6})
print(a)
Fíjate que con update() hay que poner las llaves dentro del paréntesis.
{1, 2, 3, 4, 5, 6}
Podemos unir dos sets con union.
set1 = {1, 1, 2, 3, 4, 4}.union({1, 2, 3, 4, 5, 6, 6, 6})
print(set1)
Esto no es muy útil por si solo, ya que con esta sintáxis, set1 = {1, 1, 2, 3, 4, 4, 1, 2, 3, 4, 5, 6, 6, 6}) puedo obtener el mismo resultado sin utilizar union().
{1, 2, 3, 4, 5, 6}
Pero si aplicamos su sintaxis para unir un set ya creado como el set 1 con un nuevo set, aquí sí que lo aprovechamos:
set1 = {1, 1, 2, 3, 4, 4}.union({1, 2, 3, 4, 5, 6, 6, 6})
set2 = set1.union({7, 8, 9})
print("Set 1:", set1)
print("Set 2:", set2)
Set 1: {1, 2, 3, 4, 5, 6}
Set 2: {1, 2, 3, 4, 5, 6, 7, 8, 9}
Union se puede escribir también de forma corta con la barra vertical:
set1 = {1, 1, 2, 3, 4, 4}.union({1, 2, 3, 4, 5, 6, 6, 6})
set2 = set1|({7, 8, 9})
Con intersection podemos obtener un set que contenga valores comunes en ambos sets.
set1 = {1, 1, 2, 3, 4, 4}.intersection({1, 2, 3, 4, 5, 6, 6, 6})
set2 = set1.intersection({7, 8, 9})
print("Set 1:", set1)
print("Set 2:", set2)
Set 1: {1, 2, 3, 4}
Set 2: set()
Tenemos también la forma abreviada de intersection. Se escribe con el símbolo ampersand.
set1 = {1, 1, 2, 3, 4, 4}&({1, 2, 3, 4, 5, 6, 6, 6})
set2 = set1.intersection({7, 8, 9})
print("Set 1:", set1)
print("Set 2:", set2)
Set 1: {1, 2, 3, 4}
Set 2: set()
Veamos otro ejemplo, ahora con strings.
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g'}
print(a & b)
print(b.intersection(a))
{'d'}
{'d'}
Podemos utilizar esto mismo por supuesto con union también.
Al contrario de sacar los comunes, podemos obtener los valores diferentes de cada set con difference.
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g'}
print(a.difference(b))
print(b.difference(a))
{'a', 'c', 'b'}
{'e', 'f', 'g'}
Podemos utilizar el símbolo "-" (menos) con el que hacemos las restas, en lugar de difference.
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g'}
print(a - b)
print(b - a)
{'a', 'c', 'b'}
{'e', 'f', 'g'}
simetric diference muestra los valores que no están repetidos en ninguno de los dos sets. Lo podemos escribir de las dos formas que ves en el print():
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g'}
print(a.symmetric_difference(b))
print(b - a)
{'g', 'a', 'f', 'e', 'b', 'c'}
{'g', 'f', 'e', 'a', 'b', 'c'}
Con issuperset comprobamos si el contenido de un set está en otro, ¡todo!, por lo que en este caso si tenemos los cuatro string del set a dentro de b, me devuelve False, y si no están todos en el set b, devuelve False.
Lo puedes escribir de las dos formas que ves en el print():
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g'}
print(a.issuperset(b))
print(b >= a)
False
False
En cambio, si incluyo estos strings, ahora si, me devuelve True en el set b, porqué todo el contenido del set a está repetido completamente en el set b.
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g','a', 'b', 'c'}
print(a.issuperset(b))
print(b >= a)
False
True
Con issubset hacemos lo contrario, en caso de que los valores del set a estén en el set b, devuelve True, en caso contrario, False.
isuperset e isubset hacen lo mismo, comprobar si todos los valores de un set están en otro, independientemente de si tienen otros valores más. La diferencia es que el True y el False, están invertidos.
Puedes escribirlo de las dos formas que ves en los print():
a = {'a', 'b', 'c', 'd'}
b = {'d', 'e', 'f', 'g','a', 'b', 'c'}
print(a.issubset(b))
print(b <= a)
True
False
isdisjoint devuelve True, si los valores de un set no están en el otro, si uno solo de ellos está, devuelve False.
a = {'a', 'b'}
b = {'d', 'e'}
print(a.isdisjoint(b))
True
a = {'a', 'b'}
b = {'d', 'e', 'a'}
print(a.isdisjoint(b))
False
Capítulo intenso y largo, que seguro que entiendes mucho mejor si ves el vídeo, ya que estas cosas es mejor ir probándolas para tener bien claro cómo funcionan.
Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.
Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.
No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.
Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.