Analogía Principal: Diferentes Tipos de Contenedores
La clave para memorizarlo es pensar en el propósito de tus datos antes de elegir la estructura. ¡Practica con estos ejemplos.
Analogía Principal: Diferentes Tipos de Contenedores
Imagina que tienes diferentes tipos de contenedores para organizar tus cosas:
Lista = Caja de herramientas (ordenada, puedes cambiar herramientas)
Tupla = Caja fuerte sellada (ordenada, no puedes cambiar contenido)
Set = Bolso desordenado (sin orden, no duplicados)
Diccionario = Archivador con etiquetas (organizado por claves únicas).
1. Lista (list)
Para colecciones ordenadas donde el orden de inserción importa y posiblemente necesites elementos repetidos.
La Lista de Compras: El orden en que apuntas los productos importa y puedes necesitar comprar múltiples unidades del mismo item (
"manzanas","manzanas").lista_compras = ["pan", "leche", "huevos", "manzanas", "manzanas"]Historial de Navegación: Las páginas web que visitaste, en el orden exacto en que las viste.
historial = ["google.com", "twitter.com/home", "youtube.com/watch?v=dQw4w9WgXcQ"]Playlist de Canciones: El orden de las canciones es crucial para la experiencia de escucha.
playlist = ["Bohemian Rhapsody", "Imagine", "Blinding Lights", "Bad Guy", "Despacito"]Resultados de una Carrera: La secuencia de los corredores según van cruzando la meta.
resultados = ["corredor_45", "corredor_12", "corredor_33", "corredor_12"] # Sí, el 12 podría terminar dos veces (es un ejemplo de repetición)To-Do List (Lista de Tareas Pendientes): Anotas tareas en el orden que se te ocurren o por prioridad.
tareas_pendientes = ["Llamar al médico", "Enviar email a Juan", "Comprar café", "Llamar al médico", "Preparar presentación"]
2. Tupla (tuple)
Para datos que NO deben cambiar después de creados. Son inmutables, más ligeras y seguras.
Coordenadas GPS (Latitud, Longitud): Un punto fijo en el mapa no debería cambiar accidentalmente.
coordenadas_eyfel = (48.858370, 2.294481)Datos de una Persona para un Registro (RFC, CURP): Son identificadores únicos e inmutables.
identificadores = ("MAGJ880326ABC", "MAJG880326HDFLRN02")Configuración Constante de un Juego (Resolución de Pantalla): Se define al inicio y no cambia durante la ejecución.
resolucion = (1920, 1080) # (ancho, alto)Día y Mes de un Aniversario: La fecha de tu cumpleaños es fija.
mi_cumple = (15, 8) # (día, mes)Los valores de un Enum (Enumeración) Simple: Para definir un conjunto fijo de opciones.
ESTADOS_PEDIDO = ("RECIBIDO", "PREPARANDO", "EN_CAMINO", "ENTREGADO")
3. Conjunto (set)
Para verificar pertenencia rápida y eliminar duplicados automáticamente.
Mano de Cartas (como mencionaste): Verificar si tienes un As es instantáneo.
mano_cartas = {"As♠", "Reina♥", "7♦", "10♣", "2♠"} tiene_as = "As♠" in mano_cartas # Verificación super rápidaEtiquetas de un Blog Post: No pueden estar repetidas y a menudo se verifica si un post tiene una etiqueta específica.
etiquetas_blog = {"python", "tutorial", "programación", "datos", "web"}Lista de Usuarios Conectados a un Chat: Es crucial saber rápidamente si un usuario está online y no debe aparecer duplicado.
usuarios_conectados = {"ana_22", "carlos_h", "maria_luz", "pedro84"}Palabras Clave Únicas de un Libro (Índice): Un índice no tiene la misma palabra repetida.
indice_libro = {"variable", "bucle", "función", "clase", "objeto"}Números de Loteria Ganadores de la Semana: Un número no puede salir ganador dos veces en el mismo sorteo.
numeros_ganadores = {15, 22, 45, 8, 33}
4. Diccionario (dict)
Para almacenar datos como pares clave-valor y acceder a ellos de forma extremadamente rápida mediante la clave.
Agenda de Contactos: Accedes a la información de una persona (valor) usando su nombre (clave).
agenda = { "Alicia": "555-1234", "Roberto": "555-5678", "Emergencias": 911, "Carlos": {"tel": "555-0000", "email": "carlos@mail.com"} }Configuración de una Aplicación: Cada ajuste (clave) tiene un valor específico.
config = { "tema": "oscuro", "idioma": "es", "notificaciones": True, "volumen": 80, "resolucion": (1920, 1080) }Glosario/Traductor Simple: La palabra a buscar es la clave, la definición o traducción es el valor.
traductor_es_en = { "hola": "hello", "adiós": "goodbye", "gato": "cat", "perro": "dog", "agua": "water" }Carrito de Compras de un E-commerce: El ID del producto (clave) guarda la cantidad que se quiere comprar (valor).
carrito_compras = { "PROD-001": 2, # 2 unidades del producto 001 "PROD-055": 1, "PROD-123": 5, "PROD-512": 1 }Perfil de Usuario en una Red Social: Cada atributo del perfil (clave) tiene su dato correspondiente (valor).
perfil_usuario = { "id": 12345, "username": "data_queen", "nombre": "Ana García", "seguidores": 1540, "verificado": False }
1. Lista (list)
Para colecciones ordenadas donde el orden de inserción importa y posiblemente necesites elementos repetidos.
"Necesito modelar una fila o cola de atención (el orden de llegada es crucial)."
cola_supermercado = ["Cliente_A", "Cliente_B", "Cliente_C"] # El próximo en ser atendido es cola_supermercado.pop(0)"Estoy grabando los pasos que un usuario realiza en mi software para crear un 'historial de acciones' y permitir deshacer/rehacer."
historial_acciones = ["escribir('Hola')", "formatear(negrita)", "insertar_imagen()"]"Tengo que procesar una serie de mediciones de temperatura tomadas cada hora a lo largo de un día (el orden temporal es importante)."
temperaturas_diarias = [22.5, 23.1, 24.8, 26.0, 25.7, ...] # 24 valores"Voy a guardar los nombres de todos los ganadores de un torneo en la secuencia exacta en que ganaron (1er, 2do, 3er puesto...)."
podio = ["María Pérez", "Carlos Ruiz", "Ana García"]"Quiero una estructura para representar los ítems de un menú de restaurante en el orden que aparecen en la carta."
menu = ["Ensalada César", "Sopa del Día", "Lasaña", "Tiramisú"]
2. Tupla (tuple)
Para datos que NO deben cambiar después de creados. Son inmutables, más ligeras y seguras.
"Necesito almacenar los días de la semana. Son un conjunto fijo de valores que no debe poder modificarse."
dias_semana = ("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")"Mi función debe devolver las coordenadas de un elemento en la pantalla (fila, columna) y quiero que este valor sea de solo lectura."
def buscar_elemento(): # ... lógica de búsqueda return (fila_encontrada, columna_encontrada) # Immutable"Voy a definir los parámetros de conexión a una base de datos (host, puerto, nombre BD) que serán constantes durante toda la ejecución."
config_bd = ("mi-servidor.com", 5432, "bd_principal")"Quiero representar los colores RGB de los que dispone mi paleta de diseño. Son valores predefinidos e inalterables."
COLOR_PRINCIPAL = (255, 0, 0) # Rojo COLOR_SECUNDARIO = (0, 0, 255) # Azul"Necesito un registro de un evento histórico con su fecha y descripción, que una vez creado no debe ser alterado."
evento_historico = (1789, "Toma de la Bastilla")
3. Conjunto (set)
Para verificar pertenencia rápida y eliminar duplicados automáticamente.
"Necesito encontrar todos los tags únicos que se han usado en los posts de mi blog para crear una 'nube de tags'."
todos_los_tags = {"python", "web", "data", "tutorial", "python"} # Los duplicados se eliminan # todos_los_tags ahora es {"python", "web", "data", "tutorial"}"Estoy haciendo un juego de palabras y necesito una estructura para las letras disponibles. No puede haber letras repetidas."
letras_disponibles = {"A", "R", "T", "S", "E"} # Letras en un Scrabble"Quiero mantener una lista de direcciones IP únicas que han visitado mi sitio web hoy, ignorando visitas repetidas de la misma IP."
ips_unicas_hoy = {"192.168.1.1", "8.8.8.8", "200.5.10.15"}"Tengo dos grupos de personas (A y B) y quiero encontrar rápidamente los amigos que tenemos en común (intersección)."
mis_amigos = {"Ana", "Luis", "Sofía"} sus_amigos = {"Carlos", "Ana", "Pedro"} amigos_en_comun = mis_amigos & sus_amigos # {"Ana"}"Necesito verificar extremadamente rápido si una tarjeta de regalo ya ha sido canjeada en mi sistema."
tarjetas_canjeadas = {"XCVB-1234-ABCD", "QWER-5678-EFGH"} if codigo_introducido in tarjetas_canjeadas: print("Esta tarjeta ya fue usada.")
4. Diccionario (dict)
Para almacenar datos como pares clave-valor y acceder a ellos de forma extremadamente rápida mediante la clave.
"Quiero construir una agenda donde pueda buscar el número de teléfono de una persona usando su nombre como clave."
agenda = { "Alicia": "+34 912 345 678", "Roberto": "+34 600 123 456", "Emergencias": "112" } numero = agenda["Alicia"] # Acceso rápido por clave"Necesito contar la frecuencia de cada palabra en un texto (cuántas veces aparece cada una)."
conteo_palabras = {} for palabra in texto.split(): conteo_palabras[palabra] = conteo_palabras.get(palabra, 0) + 1 # Resultado: {"el": 15, "la": 12, "de": 10, ...}"Voy a representar los atributos de un producto de mi tienda online (nombre, precio, SKU, categoría...)."
producto = { "id": "PROD-789", "nombre": "Zapatillas Running", "precio": 89.99, "stock": 45, "categorias": ["deporte", "running"] }"Estoy creando un traductor muy simple de inglés a español. La palabra en inglés es la clave, la traducción es el valor."
eng_to_esp = { "dog": "perro", "cat": "gato", "house": "casa", "water": "agua" } traduccion = eng_to_esp["house"] # "casa""Necesito un registro de estudiantes donde pueda acceder instantáneamente a toda su información usando su ID de alumno único."
alumnos = { "A123": {"nombre": "Laura", "nota": 8.5, "curso": "Python"}, "B456": {"nombre": "David", "nota": 9.1, "curso": "Web"} } info_laura = alumnos["A123"] # Acceso rápido a todos sus datos
Comentarios
Publicar un comentario