Aprende leyendo en orden

Cómo usar las tuplas de Python (tuple)

Aprende el tipo tuple de Python: declaración con paréntesis, inmutabilidad y desempaquetado de varios valores en una línea.

Qué es una tupla — la versión «no se puede cambiar» de list

Una tupla (tuple) te permite guardar varios valores juntos en una sola variable. Es muy parecida a list, vista en el artículo anterior, pero la diferencia clave es que una vez creada, no puedes cambiar su contenido.

Si una list es un contenedor que planeas reescribir (como la lista de la compra), una tupla es un contenedor que fijas una vez y dejas en paz — piensa en coordenadas (x, y) o en un color RGB como (255, 0, 0).

list vs tuple
list[1, 2, 3]mutabletuple(1, 2, 3)inmutabledeclararpropiedaddeclararpropiedad

Solo cambian el tipo de paréntesis y si se puede modificar o no; la función — agrupar varios valores — es la misma.

Si cambia, usa list; si se queda fijo, usa tuple es una regla sencilla.

Para declarar una, solo rodea los valores con ( y ), separados por comas. Donde una list usa [ ], una tuple usa ( ).

Acceder a los elementos (indexación y slicing) funciona igual que en una list: [0] para el primero, [-1] para el último, [1:3] para una rebanada.

# Declarar una tupla
fruits = ("apple", "banana", "lemon")

print(fruits)        # ('apple', 'banana', 'lemon')
print(type(fruits))  # <class 'tuple'>
print(fruits[0])     # apple
print(fruits[-1])    # lemon
print(fruits[1:])    # ('banana', 'lemon')  ← una rebanada también es tuple

# Se pueden mezclar tipos
profile = ("Ana", 28, 165.5)

Una tupla de un solo elemento necesita una coma final

Si escribes fruits = ("apple"), eso es una cadena, no una tupla. ( ) se usa también como paréntesis matemáticos, así que Python no puede distinguirlos cuando solo hay un valor dentro.

Para crear una tupla de un elemento, añade una coma final como ("apple",).

Python también te deja omitir los paréntesis y escribir 1, 2, 3 como tupla, pero por legibilidad, mantén los ( ).

Declara una tupla y saca valores de ella.

① Crea colors = ("red", "green", "blue") y usa print() para mostrar el primer y el último color.

② Imprime colors[0:2] y luego usa type() para confirmar que una rebanada sigue siendo una tupla.

(Si el código se ejecuta correctamente, aparecerá la explicación.)

Editor Python

Ejecutar el código para ver el resultado

Inmutable — «reescribir un elemento» y «cambiar la caja» son cosas distintas

Una tupla es inmutable (no modificable). Una vez creada, no puedes sobrescribir, añadir ni eliminar sus elementos.

Lo más fácil de confundir aquí es la diferencia entre «cambiar un elemento» y «meter una tupla completamente nueva en la variable». Lo primero no se puede; lo segundo sí.

«Reescribir un elemento» vs «Cambiar la caja»
t = (1,2,3)t[0] = 9TypeErrort = (1,2,3)t = (4,5,6)apunta anueva tuplaelementofallareasignarOK

t[0] = 9 intenta cambiar el contenido directamente, así que es un error.

t = (4, 5, 6) solo apunta la variable a una tupla nueva, así que funciona.

Vamos a confirmar que intentar reescribir un elemento de una tupla realmente produce un error.

① Ejecuta el código tal cual. Deberías ver un TypeError.

② Una vez visto el error, comenta la línea my_tuple[0] = 9 (añade # al inicio), y en su lugar añade my_tuple = (9, 2, 3) e imprime my_tuple. Esto no da error.

Editor Python

Ejecutar el código para ver el resultado

Concatenación y métodos (count / index)

Puedes construir una tupla nueva uniendo dos tuplas. Usar + para concatenar devuelve una tupla completamente nueva.

No hay muchos métodos — los dos que vas a usar de verdad son count e index. Se sienten igual que en una list.

Qué quieres hacerCómo escribirloPunto clave
Concatenart1 + t2Devuelve una tupla nueva; los originales no cambian
Añadir un elementot + (x,)No olvides la coma final
Contar valorest.count(x)Cuántas veces aparece x
Encontrar una posiciónt.index(x)Primera posición donde aparece x
fruits = ("apple", "banana", "lemon")

# Concatenar (devuelve una tupla nueva)
more = fruits + ("grape",)
print(more)            # ('apple', 'banana', 'lemon', 'grape')
print(fruits)          # ('apple', 'banana', 'lemon')  ← el original no cambia

# count e index
nums = (1, 2, 2, 3, 2, 4)
print(nums.count(2))   # 3 (hay tres 2)
print(nums.index(3))   # 3 (3 es el 4.º elemento = índice 3)

# Conversión entre list y tuple
list_fruits  = list(fruits)   # ['apple', 'banana', 'lemon']
tuple_fruits = tuple(list_fruits)  # ('apple', 'banana', 'lemon')

Si quieres seguir editando, convierte a list

Una tupla es para «valores que casi no se mueven», así que no encaja cuando necesitas añadir y quitar elementos a menudo. El patrón estándar: convertir a list con list(t) → editar → volver a convertir con tuple(...) si hace falta.

Saca información de una tupla de días de la semana.

days = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") está dada.

① Usa days.index("Fri") con print() para mostrar en qué posición está "Fri".

② Crea weekend = ("Sat", "Sun") e imprime days + weekend para ver qué produce la concatenación (no pasa nada si algunos elementos aparecen dos veces).

Editor Python

Ejecutar el código para ver el resultado

Desempacar y claves de dict — lo que solo puede hacer una tupla

Hay dos cosas que una tupla puede hacer y una list no: desempacar y servir de clave de dict.

Desempacar — pártela en varias variables en una línea
coord=(135, 35)lng, lat= coordlng=135lat=35asignardesempacar

Pon nombres de variables separados por comas al lado izquierdo y cada elemento de la tupla va directo a su propia variable.

La correspondencia es posición por posición, y el número de variables debe igualar al número de elementos.

# Desempacar
coord = (135.0, 35.0)
longitude, latitude = coord
print(longitude)   # 135.0
print(latitude)    # 35.0

# También puedes desempacar desde un literal
r, g, b = (255, 128, 0)
print(r, g, b)     # 255 128 0

# Un truco común: intercambiar dos valores en una línea
a, b = 1, 2
a, b = b, a
print(a, b)        # 2 1

El valor de retorno de una función también es una tupla (adelanto)

Una función de Python puede devolver varios valores con return a, b, y esos valores se empaquetan automáticamente como tupla. En el lado que llama, escribir x, y = func() los desempaca en dos variables. El capítulo de funciones viene más adelante, así que no ahondaremos aquí — pero recordar que «múltiples valores de retorno y desempacado van juntos» te hará la vida más fácil después.

Desempaqueta un color RGB.

rgb = (200, 100, 50) está dado.

① Con desempacado, saca los valores rojo / verde / azul en tres variables r, g, b.

② Usa print() para mostrar r, g, y b en una línea cada uno.

Editor Python

Ejecutar el código para ver el resultado

La otra virtud es que una tupla se puede usar como clave de dict. Una list no puede ser clave de dict, pero una tuple sí. Es útil cuando quieres usar una combinación de varios valores como una sola clave — como mapear coordenadas a un nombre de país.

Una tupla puede ser clave de dict
(135,35)tupleclave dedictOK[135,35]listclave dedictTypeError
# Un dict con claves tuple
country = {
    (135.0, 35.0): "Japan",
    (-77.0, 38.9): "USA",
}
print(country[(135.0, 35.0)])   # Japan
print(country.get((0.0, 0.0), "Desconocido"))   # Desconocido

# Una list no puede ser clave
# bad = {[135.0, 35.0]: "Japan"}  # TypeError: unhashable type: 'list'

Construye un dict que relacione coordenadas con nombres de ciudades.

① Crea un dict cities donde la clave (35.0, 139.0) valga "Tokyo", y la clave (34.7, 135.5) valga "Osaka".

② Imprime cities[(35.0, 139.0)] para confirmar que puedes recuperar Tokyo.

③ Consulta (0.0, 0.0) con .get(), pasando "Desconocido" como segundo argumento, y confirma que funciona de forma segura incluso con una clave ausente.

Editor Python

Ejecutar el código para ver el resultado

En este artículo, centrado en las diferencias con una list, has aprendido cómo declarar una tupla, qué significa la inmutabilidad, la concatenación y count / index, y desempacado y claves de dict.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de las siguientes está declarada correctamente como tupla?

Pregunta 2Dado t = (1, 2, 3), ¿cuál no provoca un error?

Pregunta 3Para coord = (135.0, 35.0), ¿cuál es la forma más simple de sacar sus dos valores a las variables lng y lat?