Un conjunto es una colección desordenada de valores no repetidos.
Los conjuntos de Python son análogos a los conjuntos matemáticos. El tipo de datos que representa a los conjuntos se llama set.
El tipo set es mutable: una vez que se ha creado un conjunto, puede ser modificado.
Las dos maneras principales de crear un conjunto son:
usar un conjunto literal, entre llaves:
>>> colores = {'azul', 'rojo', 'blanco', 'blanco'}
>>> colores
{'rojo', 'azul', 'blanco'}
Note que el conjunto no incluye elementos repetidos, y que los elementos no quedan en el mismo orden en que fueron agregados.
usar la función set aplicada sobre un iterable:
>>> set('abracadabra')
{'a', 'r', 'b', 'c', 'd'}
>>> set(range(50, 2000, 400))
{1250, 50, 1650, 850, 450}
>>> set([(1, 2, 3), (4, 5), (6, 7, 8, 9)])
{(4, 5), (6, 7, 8, 9), (1, 2, 3)}
El conjunto vacío debe ser creado usando set(), ya que {} representa el diccionario vacío.
Los elementos de un conjunto deben ser inmutables. Por ejemplo, no es posible crear un conjunto de listas, pero sí un conjunto de tuplas:
>>> s = {[2, 4], [6, 1]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> s = {(2, 4), (6, 1)}
>>>
Como un conjunto no es ordenado, no tiene sentido intentar obtener un elemento usando un índice:
>>> s = {'a', 'b', 'c'}
>>> s[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
Sin embargo, sí es posible iterar sobre un conjunto usando un ciclo for:
>>> for i in {'a', 'b', 'c'}:
... print i
...
a
c
b
len(s) entrega el número de elementos del conjunto s:
>>> len({'azul', 'verde', 'rojo'})
3
>>> len(set('abracadabra'))
5
>>> len(set())
0
x in s permite saber si el elemento x está en el conjunto s:
>>> 3 in {2, 3, 4}
True
>>> 5 in {2, 3, 4}
False
x not in s permite saber si x no está en s:
>>> 10 not in {2, 3, 4}
True
s.add(x) agrega el elemento x al conjunto s:
>>> s = {6, 1, 5, 4, 3}
>>> s.add(-37)
>>> s
{1, 3, 4, 5, 6, -37}
>>> s.add(4)
>>> s
{1, 3, 4, 5, 6, -37}
s.remove(x) elimina el elemento x del conjunto s:
>>> s = {6, 1, 5, 4, 3}
>>> s.remove(1)
>>> s
{3, 4, 5, 6}
Si el elemento x no está en el conjunto, ocurre un error de llave:
>>> s.remove(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 10
& y | son, respectivamente, los operadores de intersección y unión:
>>> a = {1, 2, 3, 4}
>>> b = {2, 4, 6, 8}
>>> a & b
{2, 4}
>>> a | b
{1, 2, 3, 4, 6, 8}
s - t entrega la diferencia entre s y t; es decir, los elementos de s que no están en t:
>>> a - b
{1, 3}
s ^ t entrega la diferencia simétrica entre s y t; es decir, los elementos que están en s o en t, pero no en ambos:
>>> a ^ b
{1, 3, 6, 8}
El operador < aplicado sobre conjuntos significa «es subconjunto de»:
>>> {1, 2} < {1, 2, 3}
True
>>> {1, 4} < {1, 2, 3}
False
s <= t también indica si s es subconjunto de t. La distinción ocurre cuando los conjuntos son iguales:
>>> {1, 2, 3} < {1, 2, 3}
False
>>> {1, 2, 3} <= {1, 2, 3}
True