139 lines
4.0 KiB
Python
Executable File
139 lines
4.0 KiB
Python
Executable File
"""
|
|
Los sets son un tipo de dato para almacenar colecciones de datos
|
|
(collection data types: List, Tuple, Set, Dictionary)
|
|
|
|
set: desordenado, mutable, sin duplicados
|
|
"""
|
|
|
|
# crear set con funcion set()
|
|
mi_set = set()
|
|
mi_set = set([1, 2, 3])
|
|
mi_set = set('hello') # {'l', 'o', 'h', 'e'}
|
|
|
|
# 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 diferenecia 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
|
|
|
|
# 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(), 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}')
|