Estructura de datos ``set``
----------------------
El ``set`` es una `estructura de datos muy usada `__. Los ``sets`` se comportan como las listas, con la diferencia de que no pueden contener elementos duplicados. Tambin son inmutables, y una vez son definidos sus elementos no pueden ser modificados. Tampoco son ordenadores, por lo que no respetan el orden en el que son definidos. Son tiles si por ejemplo quieres ver si en una lista hay duplicados o no. Tienes dos opciones de hacerlo, donde la primera usa un bucle ``for``:
.. code:: python
lista = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
duplicados = []
for value in lista:
if lista.count(value) > 1:
if value not in duplicados:
duplicados.append(value)
print(duplicados)
# Salida: ['b', 'n']
Pero hay una forma ms simple y elegante de realizar la misma tarea usando los ``sets``. Lo vemos a continuacin:
.. code:: python
lista = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
duplicados = set([x for x in lista if lista.count(x) > 1])
print(duplicados)
# Salida: set(['b', 'n'])
Los sets tambin tienen otros mtodos, vemos algunos a continuacin.
**Interseccin**
Podemos calcular la interseccin entre dos sets de la siguiente manera.
.. code:: python
set1 = set(['amarillo', 'rojo', 'azul', 'verde', 'negro'])
set2 = set(['rojo', 'marrn'])
print(set2.intersection(set1))
# Salida: set(['rojo'])
**Diferencia**
Con el mtodo ``difference`` podemos calcular la diferencia entre dos sets. Es importante notar que no es lo mismo la diferencia ``A-B`` que ``B-A``. En el siguiente caso se ve como la diferencia del set2 y el set1 son los elementos del set2 que no estn presentes en el set1.
.. code:: python
set1 = set(['amarillo', 'rojo', 'azul', 'verde', 'negro'])
set2 = set(['rojo', 'marrn'])
print(set2.difference(set1))
# Salida: set(['marrn'])
Tambin puedes crear sets usando ``{}`` como se muestra a continuacin.
.. code:: python
set1 = {'red', 'blue', 'green'}
print(type(set1))
# Salida:
Existen otros mtodos del ``set`` muy bien explicados en `este post `__.