UT4 – Estructuras de datos Complejas
Hasta ahora se han trabajado los tipos de datos simples de Python, como números, cadenas o valores lógicos. Sin embargo, en la mayoría de programas es necesario almacenar y manipular varios valores a la vez, ya sea una lista de nombres, las notas de un grupo de alumnos o los productos de una tienda. Para ello, Python ofrece una serie de tipos de datos complejos o estructuras de colección, que permiten agrupar varios elementos en una sola variable.
Estos tipos de datos no solo almacenan información, sino que también proporcionan métodos y operaciones específicas para acceder, recorrer o modificar sus contenidos. Gracias a ello, se convierten en herramientas fundamentales para organizar datos de forma eficiente y estructurada.
En esta unidad se estudiarán las cuatro colecciones principales de Python:
- Listas, que permiten guardar varios elementos ordenados y modificables.
- Tuplas, similares a las listas, pero inmutables.
- Conjuntos, que almacenan elementos únicos sin orden.
- Diccionarios, que asocian claves con valores, como si fueran mini bases de datos.
Cada una de estas estructuras tiene propiedades y usos específicos que las hacen más adecuadas para distintas situaciones. A lo largo del tema se aprenderá cómo crearlas, modificarlas y utilizarlas en programas reales, comprendiendo además sus diferencias y ventajas.
📊 Características de cada estructura
| Tipo | Ordenado | Mutable | Permite duplicados | Estructura clave–valor |
|---|---|---|---|---|
| List | ✅ | ✅ | ✅ | ❌ |
| Tuple | ✅ | ❌ | ✅ | ❌ |
| Set | ❌ | ✅ | ❌ | ❌ |
| Dict | ✅ | ✅ | ❌ (en claves) | ✅ |
Usa listas cuando necesites modificar elementos, tuplas para datos fijos, conjuntos para eliminar duplicados y diccionarios para datos relacionados.
📊 Cuándo usar cada tipo
| Necesidad | Tipo recomendado | Motivo |
|---|---|---|
| Lista de datos que cambiarán con el tiempo. | list | Permite añadir, borrar o modificar elementos. |
| Colección de datos fijos, por ejemplo coordenadas o constantes. | tuple | Protege la información (inmutable). |
| Agrupar valores únicos y realizar operaciones de conjuntos. | set | Evita duplicados y facilita uniones o intersecciones. |
| Asociar valores a una clave identificadora. | dict | Permite acceso rápido a los datos por clave. |
📊 Tabla resumen de la unidad
| Característica | Lista (list) | Tupla (tuple) | Conjunto (set) | Diccionario (dict) |
|---|---|---|---|---|
| Estructura | Colección ordenada de elementos. | Colección ordenada inmutable. | Colección no ordenada sin duplicados. | Colección de pares clave–valor. |
| Sintaxis | [1, 2, 3] | (1, 2, 3) | {1, 2, 3} o set() | {"clave": "valor"} |
| Orden | ✅ Sí (mantiene orden de inserción) | ✅ Sí | ❌ No (sin orden definido) | ✅ Sí (desde Python 3.7) |
| Mutabilidad | ✅ Mutable (puede modificarse) | ❌ Inmutable | ✅ Mutable | ✅ Mutable |
| Duplicados | ✅ Permitidos | ✅ Permitidos | ❌ No permitidos | ❌ No en claves (sí en valores) |
| Indexación | ✅ Por índice numérico | ✅ Por índice numérico | ❌ No tiene índices | ✅ Por clave |
| Tipo de elementos | Cualquier tipo (puede mezclar) | Cualquier tipo | Solo elementos hashables (inmutables) | Claves inmutables, valores de cualquier tipo |
| Anidamiento | ✅ Sí | ✅ Sí | ✅ Sí, pero poco frecuente | ✅ Sí |
| Métodos principales | append(), insert(), remove(), sort(), extend(), pop() | count(), index() | add(), remove(), discard(), union(), intersection(), difference() | keys(), values(), items(), get(), update(), pop() |
| Iteración | Por elementos o índices. | Por elementos. | Por elementos (orden aleatorio). | Por claves, valores o pares. |
| Comprensiones | [x for x in lista] | ❌ No aplica | {x for x in iterable} | {k:v for ...} |
| Usos comunes | Listas de datos cambiantes, colecciones dinámicas. | Datos fijos o constantes, coordenadas, pares inmutables. | Agrupaciones sin repetidos, operaciones matemáticas, filtrado de valores. | Estructuras asociativas, bases de datos pequeñas, configuración, mapeos. |
| Ejemplo práctico | notas = [7, 8, 9] | punto = (3, 4) | colores = {"rojo", "verde"} | usuario = {"nombre":"Ana", "edad":20} |