.. | ||
README.md | ||
sets.py |
Sets
Los sets son un tipo de dato para almacenar colecciones de datos (collection data types: List, Tuple, Set, Dictionary)
set: desordenado, mutable, sin duplicados
Ejemplos:
- Creación
- Operaciones sobre sets
- set() por comprensión
- unión, intersección y diferencia
- Copia
- frozenset()
Crear set
# crear set con funcion set()
mi_set = set()
mi_set = set([1, 2, 3])
mi_set = set('hello') # {'l', 'o', 'h', 'e'}
Operaciones sobre sets
# añadir elmento add()
mi_set.add(16)
# remover elemento remove()
mi_set.remove(16)
# arroja excepcion KeyError si no existe
# remover elemento discard()
mi_set.discard(16)
# devuelve None si no existe
# vaciar set clear()
mi_set.clear()
mi_set = {1, 2, 3, 4}
# extraer un elemento con pop()
mi_set.pop()
# extracción arbitraria
# iterar set
for i in mi_set:
pass
# verificar existencia
if 2 in mi_set:
print('si')
Nota Números Primos
- son impares a excepción del primer primo '2'
- no terminan en '0' o numero par
- no terminan en '5' a excepción del '5'
Regla general: todo número divisible solo por 1 y por si mismo.
set() por comprensión
impares = set([x for x in range(1, 10, 2)])
pares = set([x for x in range(0, 10, 2)])
# impares: {1, 3, 5, 7, 9}
# pares: {0, 2, 4, 6, 8}
# comprension de set condicional
frase = "hola a todas las personas"
vocales_unicas = {i for i in frase if i in 'aeiou'}
# {'e', 'a', 'o'}
primos = set([2, 3, 5, 7])
union, intersección y diferencia
primos = set([2, 3, 5, 7])
# union, intersección, y diferencia de sets
# estos no modifican los sets originales, si no q retornan un nuevo set
# union: combina elementos entre 2 sets sin duplicados
u = impares.union(pares) # u = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# intersección: contempla solo los elementos encontrados en ambos sets
i = primos.intersection(pares) # i = {2}
# diferencia: contempla solo los elementos del primer set,
# que no se encuentran el el segundo
dif = u.difference(primos) # dif = {0, 1, 4, 6, 8, 9}
dif = u.difference(impares) # dif = {0, 2, 4, 6, 8}
dif = u.difference(pares) # dif = {1, 3, 5, 7, 9}
# diferencia simetrica: combina los elementos únicos entre ambos sets
dif_s = primos.symmetric_difference(pares) # dif = {0, 3, 4, 5, 6, 7, 8}
dif_s = primos.symmetric_difference(impares) # dif = {1, 2, 9}
dif_s = u.symmetric_difference(primos) # dif = {0, 1, 4, 6, 8, 9}
# update(), intersection_update(),
# difference_update() y symmetric_difference_update()
# escriben los cambios en el set
# update set
impares.update(primos) # impares = {1, 2, 3, 5, 7, 9}
# intersection_update()
u.intersection_update(pares) # u = {0, 2, 4, 6, 8}
# difference_update()
u.difference_update(impares) # u = {0, 4, 6, 8}
# symmetric_difference_update()
u.symmetric_difference_update(dif_s) # u = {1, 9}
# issubset(), retorna True si el set que llama al metodo
# es un sub-set del set pasado como argumento
u.issubset(impares) # True
# issuperset(), retorna True si el set pasado como argumento
# es un sub-set del set que llama al metodo
impares.issuperset(u) # True
# isdisjoint(), retorna True si el set que llama al metodo no tiene
# ningun elemento que coincida con los del set pasado como argumento
u.isdisjoint(pares) # True
Copiar sets
# esta asignación hace referencia al mismo punto en memoria
copia_set = pares
# cualquier cambio en copia_set modfica el set pares.
# copiar con copy()
copia_set = pares.copy()
# copiar con set()
copia_set = set(pares)
frozenset()
# frozenset(), es otro 'collection data type',
# es identico al set, salvo que es inmutable
mi_frozenset = frozenset([x for x in range(1, 101)])
try:
msg = mi_frozenset.add(101)
except AttributeError as AE:
# msg = AE.__str__()
msg = str(AE)
try:
msg = mi_frozenset.remove(1)
except AttributeError as AE:
msg += '\n' + AE.__str__()
finally:
print(f'frozenset es inmutable\n{msg}')