Contenido del capítulo

En este capítulo se explica brevemente lo que son las constantes y de qué forma las trata Python.

Duración estimada de todo el contenido:
Duración del vídeo:
Contiene 1 ejercicio de Python para resolver. Contiene 1 vídeo.
Tabla de contenidos
Logo

    ¿Qué son los sets de Python?

    Los sets de Python
    Los sets de Python

    Los sets, conocidos en español como conjuntos, son estructuras de datos que almacenan valores únicos, es decir, no permiten duplicados. Al contrario de las listas o tuplas, los conjuntos no mantienen un orden específico para sus elementos; estos se colocan aleatoriamente al ejecutar el código.

    Además, los elementos de un conjunto deben ser inmutables, como str, int, tuple, float, etc. Por lo tanto, no se pueden incluir elementos mutables como listas dentro de los conjuntos.

    El término set, en este contexto, puede ser traducido al español como conjunto.

    Es mucho más común denominar a estos elementos con su nombre en inglés, incluso cuando se está dando una explicación en español.

    El tipo de dato de Python correspondiente a un conjunto, es set.

    Espacio publicitario

    ¿Por qué los conjuntos solo aceptan objetos inmutables?

    Principalmente, los conjuntos no aceptan objetos mutables como elementos, debido a la forma en que Python maneja los elementos en un conjunto. Los conjuntos utilizan el hash de los objetos para almacenar elementos y comprobar si existen duplicados. Como mencioné en el capítulo anterior, expliqué que uno de los requisitos para que un objeto sea hashable es que sea inmutable. Todo está relacionado en este punto.

    Sintaxis de un conjunto

    La sintaxis de un conjunto es la misma que una tupla o una lista, con la diferencia de que estos se crean con unas llaves ({ }):

    {elemento1, elemento2, elemento3, ...}

    Ejemplo de uso de un conjunto

    Veamos un ejemplo práctico con un conjunto:

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    print(set_colores)

    Si ejecutas este código, verás que los resultados son aleatorios; cada vez que lo vuelvas a ejecutar, el orden cambiará. Esto se debe a la falta de un índice de posiciones.

    Resultado en la consola
    {'negro', 'azul', 'rojo', 'verde', 'amarillo', 'naranja', 'rosa'}

    Métodos para sets de Python

    Veamos a continuación algunos métodos que puedes utilizar para trabajar con conjuntos.

    Añadir valores a un conjunto con el método add()

    Para añadir valores a un conjunto, podemos hacerlo con el método llamado add():

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Añade un elemento al set
    set_colores.add("marrón")
    
    print(set_colores)
    Resultado en la consola
    {'rosa', 'rojo', 'negro', 'verde', 'naranja', 'marrón', 'amarillo', 'azul'}

    El término add significa en español, añadir.

    Eliminar valores de un conjunto con el método remove()

    Para eliminar valores en un conjunto, podemos utilizar el método remove():

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se elimina un valor del set
    set_colores.remove("azul")
    
    print(set_colores)
    Resultado en la consola
    {'amarillo', 'rosa', 'verde', 'negro', 'naranja', 'rojo'}

    Espacio publicitario

    Error por elemento inexistente

    El método remove(), nos va a dar el siguiente error si intentamos eliminar un elemento inexistente en el conjunto:

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se elimina un valor del set
    set_colores.remove("cian")
    
    print(set_colores)
    Error en la consola
    KeyError: 'cian'
    Error de clave: 'cian'

    La descripción del error es breve, pero concisa. Da un error por valor inexistente, e indica cuál es.

    Eliminar elementos con el método discard()

    Con los conjuntos tenemos otro método para eliminar elementos. Realiza la misma función, pero si el elemento pasado no existe, simplemente ignora la acción en lugar de devolver un error.

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se elimina un valor del set
    set_colores.discard("cian")
    
    print(set_colores)
    Resultado en la consola
    {'amarillo', 'rosa', 'verde', 'negro', 'naranja', 'rojo'}

    El término discard se traduce al español como descartar

    Elementos duplicados en los conjuntos

    Como he indicado al principio, los conjuntos no pueden contener valores repetidos. Esto quiere decir que si ponemos un dato varias veces, se van a descartar todas las repeticiones.

    Aquí tienes una pequeña demostración:

    set_colores = {"rojo", "verde", "azul", "rojo", "blanco", "rojo", "rojo"}
                              
    print(set_colores)
    Resultado en la consola
    {'rojo', 'verde', 'blanco', 'azul'}

    El valor "rojo" ha sido escrito 4 veces en la declaración, pero realmente se queda el mismo elemento una sola vez.

    Error por elemento mutable

    El siguiente error se producirá cuando intentemos asignar a un conjunto, un elemento no hashable, como puede ser una lista:

    lista_numeros = [10,20,30,40]
    
    set_numeros = {76, 47, lista_numeros}
    Error en la consola
    TypeError: unhashable type: 'list'.
    Error de tipo: tipo de dato no hashable: 'list'.

    Para solucionar este fallo, tan solo cambia la lista por un elemento hashable como puede ser una tupla:

    tupla_numeros = (10,20,30,40)
    
    set_numeros = {76, 47, tupla_numeros}

    Espacio publicitario

    Ver el total de elementos que tiene un conjunto

    Para contar el total de elementos que tiene un objeto como un conjunto, puedes utilizar la función predefinida len() de Python:

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se cuentan los elementos
    cantidad_elementos = len(set_colores)
    
    print(f"El objeto tiene {cantidad_elementos} elementos.")
    Resultado en la consola
    El objeto tiene 7 elementos.

    Lo mismo puedes hacer con otros objetos iterables de Python, como las listas, tuplas, cadenas, etc.

    saludo = "Hola"
    
    # Se cuentan los caracteres
    cantidad_caracteres = len(saludo)
    
    print(f"El texto tiene {cantidad_caracteres} caracteres.")
    Resultado en la consola
    El texto tiene 4 caracteres.

    Los ejemplos de este apartado funcionan también con listas y tuplas.

    Ver los valores mayores y menores de un conjunto

    Mediante el uso de las funciones predefinidas min() y max() de Python, puedes obtener los valores mínimo y máximo de un conjunto, respectivamente.

    Empecemos con la función min() que mostrará el valor más bajo contenido en el conjunto:

    set_colores = {100, 6578, 54, 4, 56, 2}
    
    # Se busca el valor más bajo del conjunto
    valor_minimo = min(set_colores)
    
    print(f"El valor mínimo del conjunto es: {valor_minimo}")
    Resultado en la consola
    El valor mínimo del conjunto es: 2

    La función max() mostrará el valor máximo en el conjunto:

    set_colores = {100, 6578, 54, 4, 56, 2}
    
    # Se busca el valor más alto del conjunto
    valor_maximo = max(set_colores)
    
    print(f"El valor máximo del conjunto es: {valor_maximo}")
    Resultado en la consola
    El valor máximo del conjunto es: 6578

    Es posible encontrar los valores mayores y menores de conjuntos con cadenas de caracteres. En este caso, la lógica se aplica en orden alfabético.

    En el siguiente ejemplo se obtiene el valor "amarillo" por ser la palabra menor alfabéticamente hablando:

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se busca el color más "pequeño" alfabéticamente
    color = min(set_colores)
    
    print(color)
    Resultado en la consola
    amarillo

    En el siguiente ejemplo se obtiene el valor "verde" por ser la palabra mayor alfabéticamente hablando:

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}
    
    # Se busca el color más "grande" alfabéticamente
    color = max(set_colores)
    
    print(color)
    Resultado en la consola
    verde

    Si utilizas los métodos min() y max() con una cadena de caracteres, estos obtendrán solo el caracter menor o mayor, respectivamente.

    Espacio publicitario

    Inmutabilidad con frozensets

    Para que entiendas bien lo que son los frozensets, vamos a hacer una comparación.

    Frozenset se puede traducir al español como conjunto congelado.

    Las listas y las tuplas son elementos muy parecidos. Ambos tipos de elementos tienen índice de posición (son iterables). Sin embargo, la diferencia destacable entre ambos es que la lista es mutable y la tupla inmutable.

    Con los conjuntos también contamos con su semejante, los frozensets.

    Un conjunto es mutable, ya que puedes añadirle elementos o eliminarlos, como hemos hecho anteriormente con sus métodos. Entonces, para cuando necesitemos conjuntos inmutables, tendremos a mano los frozensets.

    Que un frozenset sea inmutable significa que una vez que se crea, no se puede modificar añadiendo, eliminando o cambiando elementos. Los frozensets son útiles cuando se necesita garantizar que los datos no cambien después de su creación, especialmente en contextos donde la inmutabilidad es necesaria o preferible.

    Sintaxis de un frozenset

    La sintaxis de un frozenset es la siguiente:

    frozenset([elemento1, elemento2, elemento3, ...])

    Ejemplo práctico con un frozenset:

    numeros = frozenset([1, 2, 3, 4, 5])
                          
    print(numeros)
    Resultado en la consola
    frozenset({1, 2, 3, 4, 5})

    Si intentas mutar el frozenset, recibirás el siguiente error:

    numeros = frozenset([1, 2, 3, 4, 5])
    
    numeros.add(300)
    
    print(numeros)
    Error en la consola
    AttributeError: 'frozenset' object has no attribute 'add'
    Error de atributo: el objeto de tipo 'frozenset' no tiene el atributo 'add'

    Todavía te queda mucho por aprender sobre los conjuntos. Por el momento lo he tratado de forma básica, para que entiendas lo que es un conjunto.

    Los conjuntos empezarás a manejarlos mejor cuando empieces a estudiar temas concretos que los requieran. Temas como la ciencia de datos.

    Espacio publicitario




    Espacio publicitario


    Ejercicios de Python para resolver

    46. ¿En qué posición del índice está el color "azul"?

    set_colores = {"rojo", "verde", "azul", "amarillo", "naranja", "negro", "rosa"}

    El valor "azul" no está en ninguna posición de índice concreta, puesto que los conjuntos no tienen índice.

    Esto se trataba de una pregunta trampa para ver si habías prestado atención al capítulo.



    Espacio publicitario