Los sets son colecciones no ordenadas de elementos únicos. A diferencia de las secuencias, sus elementos no pueden accederse por indexado ni particionado.
Hay dos typos de sets: set, que es mutable, y frozenset, que es inmutable.
Ambos tipos de sets pueden crearse con las respectivas funciones set() y frozenset().
Estas funciones pueblan el set iterando sobre el argumento dado.
a = set([1, 2, 3, 2, 1, 4, 5, 3])
print(a, type(a), sep='\t')
a = frozenset([1, 2, 3, 2, 1, 4, 5, 3])
print(a, type(a), sep='\t')
Los elementos de un set son únicos (sin repeticiones dentro del set), y deben ser objetos inmutables: números, cadenas de caracteres, tuples y sets inmutables, pero no listas ni sets mutables.
a = set(["foo", (2, 1, 4), 5, 3])
print(a)
b = set(["foo", frozenset([2, 1, 4]), 5, 3])
print(b)
c = set(["foo", [2, 1, 4], 5, 3])
print(c)
d = set(["foo", set([2, 1, 4]), 5, 3])
print(d)
Crear una función que determine el pitch-class set de una secuencia de alturas dada como argumento. Utilizar para ello la función que devuelve el pitch-class de una altura.
def pitch_a_pc(pitch):
'''convierte una altura en número de nota MIDI a pitch-class'''
pc = pitch % 12
return pc
def pcset(alturas):
'''devuelve el pitch-class set de una secuencia de alturas'''
pc_set = set([pitch_a_pc(i) for i in alturas])
return pc_set
# listas con las alturas en nota MIDI
alturas1 = [77, 63, 59, 54, 64, 71, 66, 57, 68, 76, 73, 65]
alturas2 = [67, 73, 58, 79, 49, 69]
# imprimir el set
print(pcset(alturas1))
print(pcset(alturas2))
print(pcset(alturas1+alturas2))
Devuelve la longitud de un set.
Hace una copia del set.
Devuelve la diferencia entre dos sets: todos los elementos que están en el set al cual le aplico el método, pero no en el argumento.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
print(set1)
print(set2)
print(set1.difference(set2))
print(set2.difference(set1))
Devuelve la intersección entre los sets: todos los elementos que están en ambos.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
print(set1)
print(set2)
print(set1.intersection(set2))
print(set2.intersection(set1))
Devuelve True si no hay elementos comunes entre los sets.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
print(set1)
print(set2)
print(set1.isdisjoint(set2))
Devuelve True si el set es un subconjunto del set argumento.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
set3 = set([11, 5, 2, 4])
print(set1)
print(set2)
print(set3)
print(set2.issubset(set1))
print(set3.issubset(set1))
Devuelve True si el set es un superset del set argumento.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
set3 = set([11, 5, 2, 4])
print(set1)
print(set2)
print(set3)
print(set1.issuperset(set2))
print(set1.issuperset(set3))
Devuelve todos los elementos que están en un set u otro, pero no en ambos.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
print(set1)
print(set2)
print(set1.symmetric_difference(set2))
Devuelve un set con todos los elementos que están en alguno de los sets.
set1 = set([4, 3, 11, 7, 5, 2, 1, 4])
set2 = set([11, 5, 9, 2, 4, 8])
print(set1)
print(set2)
print(set1.union(set2))