¿Qué son 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)
('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])
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.
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()
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 comopop()
,append()
, oremove()
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"))
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"))
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)
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
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ónnumero_1umer, numero_2 = numeros
pretende asignar estos valores a dos variables,numero_1
ynumero_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.
*
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)
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.
# 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)
10
20
[30, 40]
Espacio publicitario
Espacio publicitario
Espacio publicitario