Sets
Clase 19 de 56 • 21 Días de Python
Contenido del curso
Clase 19 de 56 • 21 Días de Python
Contenido del curso
Los sets en son estructuras de datos que permiten almacenar valores únicos. Los sets en Python no permiten duplicados, lo que los hace ideales cuando se necesita mantener una colección de elementos únicos.
Crear un set en Python es sencillo, puedes hacerlo de la siguiente manera:
my_set = set()
También es posible crear un set a partir de una lista existente:
my_list = [1, 2, 3, 4, 5] my_set = set(my_list)
Algunos de los métodos más utilizados en los sets de Python son:
add(value): este método agrega un valor único al set. Si se intenta agregar un valor que ya existe en el set, no ocurrirá ningún cambio.remove(value): este método elimina un valor específico del set. Si el valor no existe, se generará un error.discard(value): este método elimina un valor específico del set. Si el valor no existe, no se genera ningún error.pop(): este método elimina y devuelve un elemento aleatorio del set.clear(): este método vacía completamente el set.len(): esta función devuelve la cantidad de elementos que existen en el set.Ejemplos de uso 👇
my_set = set() # Agregar elementos al set my_set.add(1) my_set.add(2) my_set.add(3) # Imprimir el set print(my_set) # Output: {1, 2, 3} # Verificar si un elemento existe en el set print(2 in my_set) # Output: True # Eliminar un elemento del set my_set.remove(2) # Verificar si un elemento existe en el set después de ser eliminado print(2 in my_set) # Output: False # Vaciar el set my_set.clear() # Verificar el tamaño del set después de ser vaciado print(len(my_set)) # Output: 0
Iterar sobre sets
Los sets en Python no son estructuras indexadas, por lo que no se puede acceder a sus elementos mediante índices como se hace en las listas o tuplas. Sin embargo, es posible iterar sobre los elementos de un set utilizando un ciclo for-in.
Al iterar sobre un set, el ciclo for recorre automáticamente cada elemento del set en el orden en que fueron agregados.
Aquí un ejemplo de como hacerlo 👇
my_set = {1, 2, 3, 4, 5} # Iterar sobre los elementos del set for element in my_set: print(element)
En este ejemplo, se declara un set llamado my_set con algunos elementos. Luego, se utiliza el ciclo for-in para iterar sobre los elementos del set y se imprime cada elemento en la consola.
Usando slice syntax
También se puede utilizar la slice syntax([1:]) para iterar sobre un set a partir de un índice específico. Esta técnica permite omitir los primeros elementos del set durante la iteración.
Aquí un ejemplo de cómo utilizar esta sintaxis para iterar en un set a partir del segundo elemento:
my_set = {1, 2, 3, 4, 5} # Iterar sobre los elementos del set a partir del segundo elemento for item in my_set[1:]: print(item)
El set my_set contiene los elementos del 1 al 5. Al utilizar la sintaxis [1:], se indica que se desea iterar sobre los elementos a partir del segundo elemento (índice 1). Esto significa que se omitirá el primer elemento del set durante la iteración.
El resultado de este código será:
2 3 4 5
Cabe destacar que, a diferencia de las listas, los sets en Python no están indexados y no tienen un orden específico. Por lo tanto, al utilizar la slice syntax [1:] en un set, no se garantiza que se omitirán los primeros elementos en el mismo orden en que fueron agregados al set.
Intersecciones
Las intersecciones son una operación comúnmente utilizada en los sets para encontrar elementos que están presentes en dos o más sets al mismo tiempo. Puedes realizar la operación de intersección utilizando el método intersection() o el operador &.
Aquí tienes un ejemplo de cómo encontrar la intersección entre dos sets:
set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} # Usando el método intersection() intersection = set1.intersection(set2) print(intersection) # Output: {4, 5} # Usando el operador & intersection = set1 & set2 print(intersection) # Output: {4, 5}
En este ejemplo, tenemos dos sets: set1 y set2. Queremos encontrar los elementos que están presentes en ambos sets. Utilizando el método intersection() o el operador &, obtenemos un nuevo set llamado intersection que contiene la intersección de los dos sets originales.
El resultado de la impresión será {4, 5}, ya que esos son los elementos que se encuentran en ambos sets.
Es importante tener en cuenta que la operación de intersección devuelve un nuevo set que contiene los elementos comunes entre los sets originales. Si alguno de los sets no tiene elementos en común con los otros sets, la intersección resultante será un set vacío.
Además, puedes realizar la intersección entre más de dos sets al mismo tiempo. Solo necesitas agregar los sets adicionales dentro de la función intersection() o utilizar el operador & entre ellos.
Todo esto y más lo puedes aprender en el Curso de Python: Comprehensions, Funciones y Manejo de Errores
Paola Alapizco
Luis Gutiérrez Aguirre
Eduardo Peña Ramos
Waldir Zapata Garcia
CARLOS ALBERTO MARTINEZ SANCHEZ
Diego Martínez Maqueda
Nicolas Alpargatero
Edgar Alarcón
Eduardo Peña Ramos
Luis Kennedy Saavedra Fuentes
Jhon Freddy Tavera Blandon
Danny Zavid Herrera Hitas
El ejemplo de slice syntax es incorrecto, al implementar el código
my_set = {1, 2, 3, 4, 5} for item in my_set[1:]: print(item)
Python nos lanza el siguiente error:
TypeError: 'set' object is not subscriptable
Los sets al no manejar indices no podemos aplicarle slicing, a menos que transformemos el set a una lista
my_set = {1, 2, 3, 4, 5} for item in list(my_set)[1:]: print(item)
Output:
2 3 4 5
Les dejo este link para más ejemplos y documentación sobre sets
Justamente es lo que estaba comprobando, aquí otro ejemplo de como pasarlo a lista
my_set = {1, 2, 3, 4, 5} my_list = list(my_set) for item in my_list[1:]: print(item)
Exacto, no se puede. De hecho más abajo se contradice al decir:
Cabe destacar que, a diferencia de las listas, los sets en Python no están indexados y no tienen un orden específico. Por lo tanto, al utilizar la slice syntax [1:] en un set, no se garantiza que se omitirán los primeros elementos en el mismo orden en que fueron agregados al set.
Aunque sería más preciso decir que no se puede usar sintaxis de rango (o slices) [:].
++operadores con Set++
print("5.1 Union usando el operador: | \n. No inserta elementos repetidos") a = {1, 2, 3, 4} b = {2, 4, 6, 8} union = a | b print(union) #{1, 2, 3, 4, 6, 8}
print("5.2.2 Intersección usando el operador &. my_set1 & my_set2 ") # Usando el operador & intersection = a& b print(intersection) # Output: {2, 4}
print("5.3 diferencia de conjuntos usando el operador: -") #usando el operador - diferenciayb = a - b print("a - b:", diferenciayb) # Output: {1, 3} diferencibya = b - a print("b - a:", diferencibya) # Output: {8, 6}
print("5.4 diferencia simétrica de conjuntos usando el operador: ^") print("es el conjunto que contiene los elementos de A y B que no son comunes.") #usando el operador ^ difsimetrica = a ^ b print("a ^ b:", difsimetrica) # Output: {1, 3, 6, 8}
Excelente aporte, mil gracias.!
Además de la intersección, con los sets también se pueden trabajar otras operaciones de conjuntos como la unión y la diferencia.
set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} union = set1.union(set2) print(union) # Output: {1, 2, 3, 4, 5, 6, 7, 8} union = set1 | set2 print(union) # Output: {1, 2, 3, 4, 5, 6, 7, 8} diferencia = set1.difference(set2) print(diferencia) # Output: {1, 2, 3}
Este resumen si esta bueno. De pronto agregaría
{} para declarar variable pues ese es para dict, en conjuntos si o si toca con set(), o al menos que se cree con contenido ahi si con {}set() listos, adios duplicados.Como dice Nicola, o se ajusta de esta forma :
Hola Edgar, convirtiendo el set a lista sí se puede. Correcto.
# 1. Declarate set() my_set = set() # 2, Coercion explicita to List to Tuple my_list = [1, 2, 3, 4, 5] my_set = set(my_list) # 3. sets() methods: """ add(value): agrega un valor único al set. Si se intenta agregar un valor que ya existe en el set, no ocurrirá ningún cambio. remove(value): elimina un valor específico del set. Si el valor no existe, se generará un error. discard(value): elimina un valor específico del set. Si el valor no existe, no se genera ningún error. pop(): elimina y devuelve un elemento aleatorio del set. clear(): vacía completamente el set. len(): devuelve la cantidad de elementos que existen en el set. """ my_set = set() # Agregar elementos al set my_set.add(1) my_set.add(2) my_set.add(3) my_set.add(4) my_set.add(5) my_set.add((3, 2, 1)) # Imprimir el set print(my_set) # Output: {1, 2, 3} # Delete with pop() my_set.pop() print(f"After pop() method: {my_set}") # Delete with remove() my_set.remove(3) print(f"After remove() method: {my_set}") # Traceback KeyError 1 # Delete with discord() my_set.discard(1) print(f"After discord() method: {my_set}") # Traceback KeyError 1 # Verificar si un elemento existe en el set print(2 in my_set) # Output: True # Eliminar un elemento del set my_set.remove(2) # Verificar si un elemento existe en el set después de ser eliminado print(2 in my_set) # Output: False # Vaciar el set my_set.clear() # Verificar el tamaño del set después de ser vaciado print(len(my_set)) # Output: 0 # 4. Iterar sobre los elementos del set # Create set() my_set = {1, 2, 3, 4, 5} print(type(my_set)) for element in my_set: print(element) # Usando slice syntax # Iterar sobre los elementos del set a partir del segundo elemento for item in list(my_set)[1:]: print(item) # 5. Las intersecciones: método intersection() o el operador &. # elementos presentes en dos o más sets al mismo tiempo set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} print(set1) print(set2) # Usando el método intersection() intersection = set1.intersection(set2) print(intersection) # Output: {4, 5} # Usando el operador & intersection = set1 & set2 print(f"a & b: {intersection}") # Output: {4, 5} # 6. método union() o usando el operador: | # No inserta elementos repetidos") a = {1, 2, 3, 4} b = {2, 4, 6, 8} print(a) print(b) # union = a | b union = a.union(b) print(f"a | b: {union}") #{1, 2, 3, 4, 6, 8} # 7. difference()) methods de conjuntos o usando el operador: - # diferenciayb = a - b diferenciayb = a.difference(b) print("a - b:", diferenciayb) # Output: {1, 3} diferencibya = b - a print("b - a:", diferencibya) # Output: {8, 6} # 8. print("5.4 diferencia simétrica de conjuntos usando el operador: ^ # es el conjunto que contiene los elementos de A y B que no son comunes. #usando el operador ^ difsimetrica = a ^ b print("a ^ b:", difsimetrica) # Output: {1, 3, 6, 8}
def contar_marcas_carros(carros): marcas_diferentes = set() for carro in carros: marcas_diferentes.add(carro) cantidad_marcas = len(marcas_diferentes) return cantidad_marcas carros = {"Toyota", "Honda", "Ford", "Toyota", "Chevrolet", "Honda", "Nissan"} cantidad_marcas = contar_marcas_carros(carros) print(cantidad_marcas) # Salida: 5
En este ejemplo, tenemos un set llamado carros que contiene diferentes marcas de carros. Queremos contar la cantidad de marcas de carros diferentes.
La función contar_marcas_carros toma el set carros como parámetro. Creamos un set vacío llamado marcas_diferentes, que utilizaremos para almacenar las marcas de carros diferentes encontradas.
Los sets no son estructuras indexadas, por lo tanto el ejemplo de "usando slice syntax" es incorrecto.