Listas, tuplas y diccionarios: las colecciones esenciales
En Python, casi todo vive dentro de una lista, una tupla o un diccionario. Estas tres colecciones son el pan de cada día de cualquier programa real.
Listas (mutables)
Una lista es una secuencia ordenada y mutable de elementos. Se define con corchetes [] y puede contener elementos de distintos tipos.
# Crear listas
frutas = ["manzana", "pera", "uva"]
numeros = [1, 2, 3, 4, 5]
mezclada = [42, "texto", True, None, 3.14] # tipos distintos
vacia = []
# Acceso por índice (empieza en 0, negativos desde el final)
print(frutas[0]) # manzana
print(frutas[-1]) # uva (último elemento)
# Slicing: [inicio:fin:paso]
print(numeros[1:4]) # [2, 3, 4]
print(numeros[::2]) # [1, 3, 5] (cada 2 elementos)
print(numeros[::-1]) # [5, 4, 3, 2, 1] (invertir)
# Modificar listas (son mutables)
frutas.append("mango") # agregar al final
frutas.insert(1, "cereza") # insertar en posición 1
frutas.extend(["kiwi", "lima"]) # agregar múltiples al final
frutas.remove("pera") # eliminar por valor (primera ocurrencia)
del frutas[0] # eliminar por índice
ultimo = frutas.pop() # extraer y eliminar el último
# Consultar listas
print(len(frutas)) # longitud
print("uva" in frutas) # True — comprueba pertenencia
print(frutas.index("uva")) # índice de "uva"
print(frutas.count("kiwi")) # número de ocurrencias
# Ordenar
numeros_desordenados = [3, 1, 4, 1, 5, 9, 2, 6]
numeros_desordenados.sort() # ordena en el lugar (muta la lista)
ordenada = sorted([3, 1, 2]) # devuelve nueva lista ordenada
manzana
uva
[2, 3, 4]
[1, 3, 5]
[5, 4, 3, 2, 1]Tuplas (inmutables)
Las tuplas son como listas, pero inmutables: una vez creadas, no se pueden modificar. Se usan para datos que no deben cambiar.
# Crear tuplas
coordenadas = (40.7128, -74.0060) # Nueva York
rgb_rojo = (255, 0, 0)
punto = (3, 4)
un_elemento = (42,) # ← la coma es OBLIGATORIA para tuplas de 1 elemento
sin_parentesis = 1, 2, 3 # los paréntesis son opcionales
# Acceso igual que listas
print(coordenadas[0]) # 40.7128
print(rgb_rojo[-1]) # 0
# Inmutabilidad — esto lanza TypeError
# coordenadas[0] = 0.0 # TypeError: 'tuple' object does not support item assignment
# Desempaquetar tuplas
latitud, longitud = coordenadas
print(f"Lat: {latitud}, Lon: {longitud}")
# Uso común: retornar múltiples valores desde una función
def min_max(numeros):
return min(numeros), max(numeros)
minimo, maximo = min_max([3, 1, 4, 1, 5, 9])
print(f"Min: {minimo}, Max: {maximo}")
# Tuplas de tuplas (coordenadas de una ruta)
ruta = ((0, 0), (3, 4), (6, 8))
for x, y in ruta:
print(f"Punto: ({x}, {y})")
40.7128
0
Lat: 40.7128, Lon: -74.006
Min: 1, Max: 9
Punto: (0, 0)
Punto: (3, 4)
Punto: (6, 8)Usa tupla cuando los datos representan un registro inmutable (coordenadas, fecha, configuración). Usa lista cuando la colección puede crecer, encogerse o reordenarse. Una regla práctica: si la colección tiene significado posicional (primero = latitud, segundo = longitud), usa tupla.
Diccionarios (key-value)
Un diccionario es una colección de pares clave-valor, optimizada para buscar por clave en O(1). Las claves deben ser inmutables (strings, números, tuplas).
# Crear diccionarios
usuario = {
"nombre": "Ana García",
"edad": 28,
"activo": True,
"puntaje": 1450
}
# Acceso por clave
print(usuario["nombre"]) # Ana García
print(usuario.get("edad")) # 28
# .get() es más seguro — devuelve None (o un default) si la clave no existe
print(usuario.get("email")) # None (no lanza KeyError)
print(usuario.get("email", "N/A")) # "N/A" (valor por defecto)
# Modificar y agregar
usuario["edad"] = 29 # actualizar valor existente
usuario["email"] = "ana@ejemplo.com" # agregar nueva clave
# Eliminar
del usuario["puntaje"] # eliminar clave
email = usuario.pop("email") # extraer y eliminar
# Iterar un diccionario
for clave in usuario: # itera las claves
print(clave, usuario[clave])
for clave, valor in usuario.items(): # itera pares
print(f"{clave}: {valor}")
print(list(usuario.keys())) # ["nombre", "edad", "activo"]
print(list(usuario.values())) # ["Ana García", 29, True]
# Diccionario anidado
config = {
"base_de_datos": {
"host": "localhost",
"puerto": 5432,
"nombre": "mi_app"
}
}
print(config["base_de_datos"]["puerto"]) # 5432
Ana García
28
None
N/A
nombre Ana García
edad 29
activo True
nombre: Ana García
edad: 29
activo: True
['nombre', 'edad', 'activo']
['Ana García', 29, True]
5432Cuándo usar cada uno
| Colección | Cuándo usarla | Ejemplo de uso |
|---|---|---|
| Lista `[]` | Secuencia ordenada que puede cambiar | Lista de tareas, historial de acciones |
| Tupla `()` | Registro inmutable con posición significativa | Coordenadas (lat, lon), colores RGB |
| Diccionario `{}` | Buscar por nombre (clave), datos estructurados | Config, usuario, respuesta de API |
# ✅ Lista: colección de items del mismo tipo que crece
tareas = ["comprar leche", "llamar al médico"]
tareas.append("enviar informe")
# ✅ Tupla: registro de datos con posición fija
punto_gps = (19.4326, -99.1332) # (latitud, longitud)
# ✅ Diccionario: objeto con campos nombrados
producto = {
"id": "PROD-001",
"nombre": "Teclado mecánico",
"precio": 89.99,
"en_stock": True
}
# Verificar si una clave existe antes de acceder
if "precio" in producto:
print(f"Precio: ${producto['precio']:.2f}")
Precio: $89.99Practica
Cinco ejercicios para dominar las colecciones esenciales de Python.