Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Semántica de listas y diccionarios Python: Abstracción con datos

Al programar, no basta con saber si algo es posible en un lenguaje sino si es la mejor opción para el problema.

📍 Por ejemplo, queremos representar un punto en un plano cartesiano.

🤔 ¿Usamos una tupla? ¿O quizá una lista? ¿Tal vez un diccionario?

Veámoslo paso a paso.


Listas en Python

Una lista es una colección de elementos que se pueden recorrer y modificar. Es ideal cuando tenemos datos homogéneos (del mismo tipo o con el mismo propósito) que queremos manejar en conjunto.

Ejemplos de listas en la vida real:

  • Una lista de usuarios registrados en un sistema.
  • Una lista de palabras prohibidas en un filtro de contenido.
  • Una lista de tareas por hacer.

En Python, una lista se ve así:

usuarios = ["Juan", "María", "Carlos"]
tareas = ["Comprar leche", "Estudiar Python", "Hacer ejercicio"]

Las listas pueden crecer, reducirse y sus elementos pueden cambiar de posición.

¿Podemos representar un punto con una lista?

Un punto es un conjunto de dos valores: una coordenada x y una coordenada y. Técnicamente podríamos representarlo con una lista así:

punto = [2, 3]
Hay un problema: las listas están pensadas para colecciones de elementos del mismo tipo, pero un punto es una unidad lógica de dos valores que siempre deben ir juntos y en la misma posición (x primero, y después).

Por ejemplo, si alguien accidentalmente agregara otro número a la lista:

punto.append(5)  # Ahora la lista tiene tres elementos

El significado de "punto" se pierde completamente.


¿Por qué una tupla es mejor?

La tupla es una estructura de datos parecida a una lista, pero con una diferencia clave: es inmutable. Es decir, una vez que creamos una tupla, no podemos cambiar sus elementos ni agregar nuevos.
punto = (2, 3)

Al usar una tupla para representar un punto, protegemos sus datos: siempre tendrá exactamente dos valores (x, y), en el orden correcto, y nadie podrá modificarlo accidentalmente.

Veamos un ejemplo dentro de una función:

def reflejar_punto(punto):
    x, y = punto  # Desempaquetamos la tupla en dos variables
    return (-x, y)  # Devolvemos una nueva tupla con x invertida

punto_original = (2, 3)
punto_reflejado = reflejar_punto(punto_original)

print(punto_reflejado)  # (-2, 3)

Aquí, punto siempre tiene exactamente dos valores, y Python no nos dejará alterarlos por accidente.


Diccionarios: una alternativa aún más clara

🤔 ¿Y si queremos que nuestro código sea más fácil de leer? Aquí entran los diccionarios, que permiten asociar valores con nombres en lugar de posiciones numéricas.

punto = {"x": 2, "y": 3}

Aquí, en lugar de acceder a los datos con punto[0] o punto[1] (lo cual puede ser confuso), podemos hacerlo con nombres:

print(punto["x"])  # 2
print(punto["y"])  # 3

Los diccionarios son útiles porque:

Hacen que el código sea más fácil de leer.

  • punto["x"] es más claro que punto[0].

Nos permiten extender la estructura sin afectar el código existente.

  • Por ejemplo, podemos agregar un color al punto:
    python punto["color"] = "rojo"

Son ideales cuando tenemos más de dos atributos.

  • Si en el futuro queremos agregar más información (por ejemplo, un identificador único o una etiqueta), podemos hacerlo sin descomponer un código basado en tuplas.

¿Cómo representar un segmento de línea?

Si un punto se puede representar con una tupla o un diccionario, un segmento de línea (dos puntos) podría representarse con una colección de ellos.

Usando una lista de tuplas:

segmento = [(2, 3), (-8, 10)]

Este enfoque funciona, pero obliga a que siempre recordemos que el primer elemento de la lista es el punto de inicio y el segundo es el punto final.

Usando un diccionario de diccionarios:

segmento = {
    "inicio": {"x": 2, "y": 3},
    "fin": {"x": -8, "y": 10},
}

Aquí, queda claro sin ambigüedades qué punto es cuál:

print(segmento["inicio"]["x"])  # 2
print(segmento["fin"]["y"])  # 10

Resumen

  • Para representar puntos en un plano cartesiano:
  • Las listas no son la mejor opción, porque están diseñadas para colecciones de elementos independientes y pueden modificarse accidentalmente.
  • Las tuplas son mejores, porque garantizan que un punto siempre tendrá dos valores en la posición correcta.
  • Los diccionarios son aún más claros, porque permiten acceder a los valores por nombre en lugar de por posición.
  • Para segmentar líneas, los diccionarios ayudan a clarificar la estructura y facilitan la lectura y mantenimiento del código.

Siempre vale la pena elegir la estructura de datos que haga que nuestro código sea más fácil de leer, entender y mantener.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY