Python – Capítulo 29: Tuplas

Ha llegado el momento de que hablemos de una estructura de datos muy similar a las ya conocidas listas: las tuplas.

Al igual que una lista, una tupla es una secuencia ordenada de objetos. La principal diferencia entre ambas es que la primera puede ser modificada mientras que una tupla es inmutable: una vez creada, su contenido no puede modificarse (pero sí sobreescribirse, lo que equivaldría a volver a crear una tupla con el mismo nombre). Recuerda los métodos append(), extend(), remove(), pop(), etc., que, de un modo u otro, afectaban al contenido de una lista. Estos métodos no están disponibles en las tuplas.

Piensa en una tupla como una estructura más ágil que una lista, descargada de parafernalia que no siempre es necesaria. En ocasiones pueden incluso ayudarte a escribir código menos propenso a errores, en el supuesto de que, por accidente, intentes modificar una secuencia de objetos que quieres proteger.

La forma básica de definir una tupla es facilitando una secuencia simple de objetos separados entre comas:

>>> frutas='melon', 'sandía'
>>> frutas
('melon', 'sandía')

Date cuenta que no necesitamos corchetes ni paréntesis de ningún tipo. Sin embargo, al visualizarla, nos aparece con paréntesis.

Llegamos con esto a un aspecto importante: el uso de paréntesis es opcional. Podrías haber creado la tupla encerrando los datos entre paréntesis del mismo modo:

>>> frutas=('melon', 'sandía')
>>> frutas
('melon', 'sandía')

Recuerda que las listas, por el contrario, van encerradas entre corchetes.

Los paréntesis no son necesarios, pero hay ocasiones en las que su uso es obligatorio cuando su falta provoca situaciones ambiguas. Por ejemplo, observa la llamada a esta función:

funcioncilla(1,2,3)

¿Es una función con tres argumentos enteros o uno sólo en forma de tupla? La respuesta es, obviamente, la primera. Si hubiera querido que el argumento fuera una tupla debería haberlo indicado entre paréntesis para solucionar la ambigüedad:

funcioncilla((1,2,3))

Python te ofrece flexibilidad a la hora de representar una tupla. Hay programadores que sólo utilizan los paréntesis cuando no queda más remedio; otros, en cambio, los indican siempre. Hay también un término medio que emplea una notación mixta en función de su propio estilo. Elige el que mejor te plazca.

Al igual que una lista, una tupla puede contener una mezcla de objetos de distintos tipos:

>>> cajon='lunes',5,[2,3]
>>> cajon
('lunes', 5, [2, 3])

El primer elemento es una cadena de caracteres, el segundo un entero y el tercero una lista.

Puedes consultar los elementos de una tupla accediendo a través de su índice:

>>> cajon[1]
5

Recuerda que el primer elemento tiene por índice cero, como en las listas.

Pero observa qué sucede si tratas de modificar la tupla:

>>> cajon[1]=7
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    cajon[1]=7
TypeError: 'tuple' object does not support item assignment 

Sencillamente, no te deja.

Debes saber algo más a la hora de crear tuplas. Para crear una tupla vacía, sin elementos, abrimos y cerramos paréntesis sin más:

>>> vacia=()
>>> vacia
()

Si no te crees que esto es una tupla, prueba con la función type() para saber de qué objeto estamos hablando:

>>> type(vacia)
<class 'tuple'>

Para crear una tupla con un único elemento, debemos finalizar la enumeración con una coma:

>>> solo_uno=1,
>>> solo_uno
(1,)
>>> type(solo_uno)
<class 'tuple'>

Naturalmente, esto se podía hecho también con paréntesis:

>>> solo_uno=(1,)

Habría sido un error, si lo que pretendíamos era generar una tupla, escribir lo siguiente:

>>> solo_uno=(1)
>>> type(solo_uno)
<class 'int'>

Date cuenta de que type() nos está devolviendo un entero en vez de una tupla.

En resumidas cuentas, a no ser que crees una tupla vacía, asegúrate de que, al menos, exista una coma, emplees o no paréntesis.

Muchas veces se dice de las tuplas que no disponen de métodos, al ser inmutables. Esto no es cierto: no existen métodos para tuplas que modifiquen su contenido, pero sí otros que no las alteren. Por ejemplo:

>>> cajon.count('lunes')
1

El método count() nos devuelve cuántos elementos existen con una valor determinado.

O también:

>>> cajon.index('lunes')
0

El método index() nos devuelve el índice de la primera ocurriencia que haya del valor buscado.

Al igual que las listas, las tuplas pueden ser troceadas:

>>> cajon[1:]
(5, [2, 3])

Esta instrucción ha generado una nueva tupla tomando los elementos que tienen por índice 1 y sucesivos de la tupla cajon.

Existen muchos usos curiosos de las tuplas que quedan camuflados por el hecho de que pueden aparecer sin paréntesis. Iremos conociéndolos, paciencia…

Javier Montero Gabarró


Python – Capítulo 29: Tuplas


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies