Contenido del capítulo

En este capítulo te explico lo que son las tuplas de Python, como usarlas con algunos de sus métodos y qué errores puedes cometer con ellas.

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

    ¿Qué son las tuplas de Python?

    Las tuplas de Python
    Las tuplas de Python

    Una tupla es una colección inmutable y ordenada de elementos.

    Al igual que las listas, las tuplas tienen índice de posiciones, de ahí lo de “ordenada”. Entonces, estamos ante otro elemento iterable de Python.

    Por lo tanto, de alguna forma, podemos decir que sí que hay constantes en Python. La diferencia, es que no son estrictamente el mismo elemento al que nos referiríamos con “constante” en programación a nivel general.

    El tipo de dato de las tuplas se llama tuple.

    Tupla en inglés se dice tuple.

    Espacio publicitario

    Sintaxis de una tupla

    La sintaxis de una tupla es muy parecida a la de una lista. La única diferencia que hay, es que se escriben con paréntesis (), en lugar de con corchetes.

    (elemento1, elemento2, elemento3, .)

    Aquí tienes un sencillo ejemplo de uso:

    tupla_colores = ("rojo", "verde", "azul")

    Acceder a los elementos de una tupla

    Para acceder a los elementos de una tupla, lo hacemos de la misma forma que con las listas.

    En el siguiente ejemplo, estoy imprimiendo una tupla entera. Para ello, solo tengo que nombrarla en el print():

    tupla_colores = ("rojo", "verde", "azul")
                            
    # Se imprime toda la tupla
    print(tupla_colores)
    Resultado en la consola
    ('rojo', 'verde', 'azul')

    En este otro ejemplo, estoy accediendo a la posición 2 de la tupla:

    tupla_colores = ("rojo", "verde", "azul")
    
    # Se imprime la posición 2 del índice
    print(tupla_colores[2])
    Resultado en la consola
    azul

    Fíjate que para acceder a una posición de la tupla, se hace con corchetes, como con las listas. Quizás esto te haya confundido, al pensar que si se declara la tupla con paréntesis, se debería acceder a las posiciones indicándolas también con paréntesis.

    Sin embargo, esto no es así, los paréntesis se utilizan para otros propósitos en Python.

    Espacio publicitario

    Métodos para tuplas

    Las tuplas, al ser inmutables, no pueden utilizar algunos de los métodos que hemos usado en las listas. Cada elemento (objeto) de Python, tiene sus propios métodos.

    Por ejemplo, no podemos eliminar un elemento de una tupla con el método pop():

    tupla_colores = ("rojo", "verde", "azul")
    tupla_colores.pop()
    Error en la consola
    AttributeError: 'tuple' object has no attribute 'pop'
    Error de atributo: 'la clase tuple' no tiene el atributo 'pop'

    El error indica que el objeto de este tipo no tiene un método llamado pop(). Las tuplas, a diferencia de las listas, no pueden ser modificadas después de su creación, por lo que no tienen métodos como pop(), append(), o remove() que sirven para modificar el contenido. Para solucionar este error, debes usar una lista en lugar de una tupla si necesitas eliminar elementos.

    Sí que podemos realizar operaciones de búsqueda con métodos iguales que los que utilizamos en las listas, count() e index(). Estas acciones de búsqueda son posibles puesto que son acciones de lectura.

    En cambio, con métodos de reasignación o eliminación, estaríamos intentando hacer acciones de escritura, que es lo que no se permite precisamente con las tuplas. La modificación.

    En informática, de forma general, se denomina “lectura” al hecho de acceder o leer información. Por ejemplo, abres un documento PDF, y muestras el contenido en la pantalla. En ese caso, se ha realizado por el sistema operativo, una acción de lectura del archivo, mostrando los datos en tu pantalla.

    Por otra parte, se denomina “escritura” al hecho de modificar la información. Por ejemplo, guardas un archivo de texto TXT con cierta información. En ese caso, se ha realizado por el sistema operativo una acción de escritura del archivo sobre el disco.

    El método index() con tuplas

    El método index() se utiliza indicando un elemento. Este nos devuelve su posición de índice, siempre que el elemento se encuentre en la tupla. Exactamente, el funcionamiento es el mismo que con las listas.

    Por ejemplo:

    tupla_colores = ("rojo", "verde", "azul")
    
    # Se busca la posición de índice de un elemento
    print(tupla_colores.index("rojo"))
    Resultado en la consola
    0

    Recuerda que si el valor no existe en la tupla, te va a dar un ValueError, al igual que sucedía con las listas.

    Espacio publicitario

    El método count()

    El método count() se puede usar también con las tuplas. Este lo emplearemos para contar el número total de veces que se encuentra un valor en ellas.

    Por ejemplo:

    tupla_colores = ("rojo", "verde", "azul", "rojo", "amarillo")
    
    # Se cuentan las veces que está el elemento
    print(tupla_colores.count("rojo"))
    Resultado en la consola
    2

    ¿Cuándo utilizar tuplas en lugar de listas?

    Tendrás que utilizar tuplas cuando necesites un conjunto de elementos inmutables. Es decir, datos que no deben cambiar durante la ejecución del programa.

    Las tuplas son adecuadas para datos constantes, como coordenadas, fechas, configuraciones y otras situaciones en las que la información no debería cambiar inesperadamente.

    Las listas, por otro lado, son más adecuadas cuando se necesita un conjunto de elementos que se puedan modificar en cualquier momento.

    Desempaquetado de tuplas y listas

    La técnica de desempaquetado de tuplas se puede utilizar en listas también. Esta técnica consiste en obtener los valores de las posiciones de una tupla o lista, y distribuirlos en varias variables. A continuación tienes un ejemplo:

    # Tupla para desempaquetar
    numeros = (10, 20, 30, 40)
    
    # Desempaquetado en variables
    numero_1, numero_2, numero_3, numero_4, = numeros
    
    # Comprobamos el resultado
    print(numero_1)
    print(numero_2)
    print(numero_3)
    print(numero_4)
    Resultado en la consola
    10
    20
    30
    40

    Si en lugar de con una tupla, haces esto con una lista, el resultado es el mismo.

    Ten en cuenta que esto solo funciona si el número de variables coincide con la tupla o lista a desempaquetar.

    En el siguiente ejemplo se intentan desempaquetar 4 valores en dos variables:

    # Tupla para desempaquetar
    numeros = (10, 20, 30, 40)
    
    # Desempaquetado en variables
    numero_1, numero_2 = numeros
    Error en la consola
    ValueError: too many values to unpack (expected 2)
    Error de valor: demasiados valores para desempaquetar (se esperaban 2)

    Al ejecutar el código, Python intenta desempaquetar los elementos de la tupla numeros, que contiene cuatro valores: (10, 20, 30, 40). La instrucción numero_1umer, numero_2 = numeros pretende asignar estos valores a dos variables, numero_1 y numero_2. Sin embargo, el intérprete de Python se encuentra con que hay más valores en la tupla de los que se han especificado para recibirlos.

    Para corregir este error, debes asegurarte de que el número de variables coincida con el número de elementos en la tupla, o utilizar el operador de asterisco (*) para recoger el exceso de valores en una lista.

    Espacio publicitario

    Recoger el exceso de valores en una lista

    En el error anterior te acabo de explicar que puedes dar una solución al problema de desempaquetar más valores de los que espera el intérprete. Ahora, vamos a profundizar en cómo utilizar el operador de asterisco (*) para manejar esos valores adicionales de forma flexible en Python.

    Cuando necesitas desempaquetar solo algunos valores de una colección más grande, puedes utilizar * delante de una variable para indicar que esa variable debe capturar todos los valores adicionales, organizándolos en una lista. Aquí te muestro cómo hacerlo en el contexto de una tupla con más elementos de los que deseas asignar a variables específicas:
    # Tupla con varios valores
    numeros = (10, 20, 30, 40)
    
    # Desempaquetado con una variable para capturar el exceso de valores
    numero_1, numero_2, *resto = numeros
    
    # Resultado
    print(numero_1)
    print(numero_2)
    print(resto)
    Resultado en la consola
    10
    20
    [30, 40]

    En este ejemplo, numero_1 y numero_2 reciben los primeros dos valores de la tupla, mientras que resto captura el resto en forma de lista. Esto resulta útil cuando no necesitas todos los elementos de una tupla o lista y prefieres que los valores extra se guarden dinámicamente.

    La lista resto del ejemplo no necesita declararse primero, si te fijas se crea y se utiliza en la línea 5 directamente.

    Sin embargo, puedes declararla primero y dejarla vacía si quieres crear un código más explícito; cosa que te recomiendo.
    A continuación tienes un ejemplo de código que muestra lo que estoy diciendo.
    # Tupla con varios valores
    numeros = (10, 20, 30, 40)
    
    # Lista vacía para almacenar valores restantes
    resto = []
    
    # Desempaquetado con una variable para capturar el exceso de valores
    numero_1, numero_2, *resto = numeros
    
    # Resultado
    print(numero_1)
    print(numero_2)
    print(resto)
    Resultado en la consola
    10
    20
    [30, 40]

    Espacio publicitario




    Espacio publicitario




    Espacio publicitario