QuieroProgramar por Rodri Gonzalez
Python · Lección 09 de 27

Tuplas

Las tuplas son la versión inmutable de las listas. Una vez creadas, no podés modificar sus elementos. Esa restricción, lejos de ser una limitación, es su mayor fortaleza: garantizan que ciertos datos no cambien accidentalmente.

60–80 min Prerrequisitos: 08 Listas
01

Concepto teórico

¿Qué es una tupla?

Una tupla es una colección ordenada e inmutable de elementos. Se crea con paréntesis () o simplemente separando valores con comas. La diferencia fundamental con las listas es que, una vez creada, no podés agregar, eliminar ni modificar sus elementos. Si intentás hacerlo, Python lanza un TypeError.

coordenadas = (34.6037, 58.3816)       # tupla con paréntesis
punto = 34.6037, 58.3816                # también válido (sin paréntesis)
singleton = (42,)                        # tupla de UN elemento (la coma es obligatoria)
no_es_tupla = (42)                       # esto es solo el int 42 entre paréntesis
vacia = ()                               # tupla vacía
Trampa clásica: la tupla de un elemento. (42) NO es una tupla — es el número 42 entre paréntesis (como en matemáticas). Para una tupla de un elemento necesitás la coma: (42,). Esto confunde al 100% de los principiantes al menos una vez.

¿Por qué usar algo que no se puede modificar?

La inmutabilidad parece una limitación, pero en realidad te da tres ventajas enormes:

Analogía bancaria: pensá en una tupla como un comprobante de transferencia: tiene fecha, monto, origen y destino. Una vez emitido, no se puede alterar — solo podés emitir uno nuevo. Una lista sería como un presupuesto en borrador: lo modificás, agregás ítems, borrás otros, hasta que quede listo.

Packing y unpacking

Packing es cuando Python empaqueta varios valores en una tupla automáticamente:

datos = "García", 35, "Buenos Aires" → Python crea la tupla ("García", 35, "Buenos Aires")

Unpacking es lo contrario: extraer los valores de una tupla a variables individuales:

nombre, edad, ciudad = datosnombre = "García", edad = 35, ciudad = "Buenos Aires"

El unpacking es increíblemente versátil:

Dato clave: cuando una función devuelve return a, b, en realidad devuelve (a, b) — una tupla. Cuando hacés x, y = funcion(), estás desempaquetando esa tupla. Este patrón es ubicuo en Python profesional.

namedtuple: tuplas con nombres

Las tuplas normales acceden a elementos por posición (datos[0], datos[1]), lo cual es poco legible. namedtuple del módulo collections te permite dar nombres a cada posición, combinando la inmutabilidad de las tuplas con la legibilidad de los diccionarios:

from collections import namedtuple

Cliente = namedtuple("Cliente", ["nombre", "edad", "score"])
c = Cliente("García", 35, 720)
print(c.nombre)  # "García" — acceso por nombre, mucho más claro que c[0]
print(c.score)   # 720
En análisis de datos: las tuplas aparecen por todos lados. Un DataFrame.shape devuelve una tupla (filas, columnas). DataFrame.iterrows() devuelve tuplas (índice, fila). .groupby().agg() con multi-index devuelve tuplas como claves. Si dominás tuplas, pandas se entiende mejor.

Cuándo usar tupla vs lista

Usá tupla cuando… Usá lista cuando…
Los datos no deben cambiar Necesitás agregar/eliminar elementos
Representás un "registro" fijo (nombre, edad, score) Representás una colección que crece/decrece
Necesitás usarla como clave de diccionario Necesitás ordenar in-place
Devolvés múltiples valores de una función Procesás datos iterativamente
Querés rendimiento en datos estáticos El tamaño varía durante ejecución
Regla práctica: si te preguntás "¿necesito modificar esto después?", la respuesta determina tu elección. Si la respuesta es no → tupla. Si es sí → lista. Ante la duda, empezá con tupla y cambiá a lista solo si necesitás mutabilidad.
02

Ejemplos explicados paso a paso

Ejemplo 1: Crear tuplas y verificar inmutabilidad

Creamos tuplas de distintas formas y demostramos que no se pueden modificar.

ejemplo_01_crear.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: Packing, unpacking y swap

El unpacking de tuplas es una de las herramientas más elegantes de Python. La usás constantemente sin darte cuenta.

ejemplo_02_unpacking.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Tuplas como registros de datos

Las tuplas son perfectas para representar registros fijos donde cada posición tiene un significado.

ejemplo_03_registros.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: namedtuple — tuplas legibles

Cuando cliente[2] no te dice nada, cliente.score se explica solo.

ejemplo_04_namedtuple.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Tuplas como claves de diccionario y en operaciones

Algo que las listas NO pueden hacer: ser claves de diccionario. Las tuplas sí, porque son inmutables (hashables).

ejemplo_05_claves.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Operación Sintaxis Resultado
Crear (1, 2, 3) o 1, 2, 3 Tupla
Singleton (42,) ← coma obligatoria Tupla de 1 elem
Desde lista tuple([1,2,3]) (1, 2, 3)
Acceso t[0], t[-1] Elemento
Slicing t[1:3] Nueva tupla
Unpacking a, b, c = t Variables
Parcial a, *rest = t var + lista
Concatenar t1 + t2 Nueva tupla
Repetir t * 3 Nueva tupla
Pertenencia x in t True/False
Contar t.count(x) int
Buscar t.index(x) int
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Crear y acceder

Creá una tupla moneda con los valores ("Peso argentino", "ARS", 1). Imprimí cada elemento por nombre descriptivo. Debe incluir ARS.

ejercicio_01.pyDebe incluir "ARS"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: Singleton y verificación de tipo

Creá una tupla de un solo elemento (42,) y otra sin coma (42). Imprimí el tipo de cada una para demostrar la diferencia. Debe incluir int.

ejercicio_02.pyDebe incluir "int"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: Unpacking básico

Dada persona = ("Fernández", 30, "Mendoza"), desempaquetá en nombre, edad, ciudad e imprimí con f-string. Debe incluir Mendoza.

ejercicio_03.pyDebe incluir "Mendoza"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: Función con retorno múltiple

Creá una función estadisticas(numeros) que devuelva una tupla con (minimo, maximo, promedio). Probala con [45000, 72000, 38000, 91000]. Debe incluir 61500.

ejercicio_04.pyDebe incluir "61500"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: Unpacking parcial con *

Dada ranking = ("Pérez", "García", "López", "Martínez", "Sosa"), usá unpacking para extraer el primero, el último, y el resto en una variable medio. Imprimí los tres. Debe incluir Pérez.

ejercicio_05.pyDebe incluir "Sosa"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Ordenar lista de tuplas

Dada esta lista de tuplas (nombre, saldo), ordenalas por saldo descendente e imprimí el ranking. Debe incluir 890000.

ejercicio_06.pyDebe incluir "890000"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Tuplas como claves de diccionario

Creá un diccionario precios donde las claves sean tuplas (producto, tamaño) y los valores sean precios. Consultá el precio de ("Café", "Grande"). Debe incluir 2800.

ejercicio_07.pyDebe incluir "2800"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: namedtuple para datos de clientes

Creá un namedtuple llamado Cuenta con campos titular, tipo, saldo. Creá 3 cuentas y calculá el saldo total. Debe incluir Total:.

ejercicio_08.pyDebe incluir "Total:"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Enumerate con unpacking

Dada una lista de tuplas operaciones = [("Compra", 15000), ("Venta", 8000), ("Compra", 22000), ("Venta", 5000)], recorrela con enumerate y unpacking para imprimir cada operación numerada. Calculá el balance final (compras positivas, ventas negativas). Debe incluir Balance: 24000.

ejercicio_09.pyDebe incluir "Balance: 24000"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Sistema de cotizaciones de monedas

Tenés cotizaciones como tuplas (moneda, compra, venta). Creá una lista con al menos 4 cotizaciones (USD oficial, USD MEP, EUR, BRL). Convertí USD 1000 a pesos con la cotización de venta del dólar MEP. Imprimí una tabla formateada con todas las cotizaciones y la brecha porcentual compra-venta. Debe incluir Brecha.

ejercicio_10_desafio.pyDebe incluir "Brecha"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (10 · Diccionarios) vas a aprender la estructura de datos más importante para análisis: pares clave-valor que te permiten representar registros completos de datos.

Recursos: Python docs — Tuples · collections.namedtuple