Conjuntos¶
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.
Cómo crear conjuntos¶
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)}
>>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
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
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
Operaciones sobre conjuntos¶
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
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