Sets en Python: conjuntos.
Los sets o conjuntos en Python son un tipo de unordered collection with no duplicate elements -colección desordenada sin repetidos-.
Los sets tienen la ventaja de soportar todas las operaciones matemáticas: union, intersection, difference y symmetric difference (ver documentación oficial aquí).
En Python 3 existen dos tipos de sets. Los sets propiamente dichos y los frozensets. Basicamente la diferencia reside en que los frozensets son inmutables, una vez creado no se le puede agregar elementos o remover elementos y tiene un hash value, lo que permite que sea clave de un dictionary o un elemento de otro set. Por lo tanto, los sets no tienen un hash value.
Como creamos un set:
# Puedo crearlo como llaves y valores separados con comas.
my_set = {"a", 1, 0, (1, )}
# Otra forma es usando el constructor set. Puede recibir una lista, tupla, dict o set.
my_set = set(["a", 1, 0, (1, )])
# Para crear un set vacío debo usar set(), si uso {} creo un dict.
my_empty_set = set()
Otra cosa importante es que los sets no soportan indexado. Esto quiere decir que no puedo acceder a un elemento del set por su indice:
In [1]: my_set = {"a", "b"}
In [2]: my_set[0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-38-0b05dff78462> in <module>()
----> 1 my_set[0]
TypeError: 'set' object does not support indexing
Existen dos maneras de agregar elementos a un set: individualmente o de a grupos:
# De a un elemento con add
my_set.add("nuevo elemento")
# De a varios con update - este método recibe uno o varios iterables
my_set.update([2,3,4])
my_set.update([4,5], {1,"a","x"}, "hola")
Para eliminar elementos tenemos remove y discard. La diferencia reside en que remove si no existe el elemento lanza una excepcion, un KeyError, y discard si no encuentra devuelve None.