97

Estructuras de datos con Python: aprende de una vez por todas

59137Puntos

hace 3 años

Cuando te involucras en el mundo de la tecnología y has comenzado a crear tus primeros proyectos, y quizás has conseguido tus primeros empleos, escucharás la frase “X sube tu nivel como desarrollador” o “Z es la diferencia entre un junior y un senior”.

Esto hace cuestionar nuestras habilidades a pesar de lo que somos capaces, pero no te preocupes, esto es totalmente normal. A lo largo de tu carrera encontrarás estos milestones o hitos que definen una nueva etapa y las estructuras de datos son una de ellas.

¿Qué son las estructuras de datos?

Hablar de estructuras de datos puede generar emociones de distintos tipos, ya que lo llegamos a asociar con algo abstracto, difícil de entender e incluso con malos recuerdos cuando intentamos aprenderlas con lenguajes que en un inicio nos parecen complejos como C++ o Java.

Ello convierte evitar aprender de estructuras de datos en un error muy común entre novatos debido a esa complejidad. Sin embargo, gracias a que la programación es tan diversa puedes darles una nueva oportunidad con Python, uno de los lenguajes de programación más sencillos de entender, y dejar esas emociones en el pasado.

Así que lo primero que debes hacer para evitar caer en este error, es entender qué es una estructura de datos o también conocida como colección. Para ello quiero que veas a un profesional de la mecánica automotriz como un programador. Estamos de acuerdo en que ambas poseen conocimientos técnicos y utilizan herramientas diversas para resolver un problema.

stack_queue.png
Ejemplo del principio fundamental de las pilas y colas.

En la mecánica vas a necesitar de herramientas, refacciones, piezas e incluso hasta piezas “hechizas” que están compuestas por otras y lo mismo sucede en la programación. Cuentas con estructuras de datos que ya están incorporadas en el lenguaje de programación, otras tendrás que modificarlas e incluso crear las propias para que cumplan con propósitos específicos.

Ok, la comparación con herramientas queda clara, entonces ¿para qué nos sirven?

Las herramientas de mecánica tienen un lugar que puede corresponder a una área de trabajo determinada como esos aparatos móviles y pesados, los martillos y mazos pueden estar colgados en un muro por su tamaño, desarmadores en una caja o incluso todas las piezas pequeñas de un tipo se encuentran en una bolsa. En resumen se trata de un orden bajo condiciones definidas.

En la programación esto se traduce en tener cajas de datos que las agruparán con ciertas condiciones o restricciones para que la información almacenada en memoria no se encuentre dispersa y traducir este orden en efectividad.

operaciones_queues.png

Velocidad vs. uso de memoria

¿Alguna vez te has puesto a analizar cuánta memoria utilizan tus proyectos o su velocidad?

Si conoces un poco sobre complejidad algorítmica, sabrás que cuando escribimos una acción en nuestro código estamos haciendo uso de ambos recursos. No es posible obtener una velocidad alta junto a un mínimo uso de memoria y debemos elegir en qué nos enfocaremos.

Con esto en mente quizás pienses que no pasa nada si simplemente sigues programando como lo has hecho hasta ahora, ya que a final de cuentas todo funciona. Ahora supongamos que ese proceso que es recurrente en tu desarrollo demora 10 segundos, en promedio es llamado 2,000 veces al día, 5 días a la semana. Esto suma un total de 1,444 horas al año aproximadamente.

Esto es casi el 16% del tiempo disponible en un año ¿qué podrías hacer si tuvieras disponible por lo menos un 5% adicional de este tiempo? ¿En qué lo aprovecharías tú o tu poder de cómputo?

# Ejemplo utilizando un stack sencillo>>> from stack import Stack
>>> hot_cakes = Stack()

>>> hot_cakes.push('banana pancake')
>>> hot_cakes.push('chocolate chip')
>>> hot_cakes.push('blueberry pancake')

>>> hot_cakes
['banana pancake', 'chocolate chip', 'blueberry pancake']

>>> hot_cakes.pop()
'blueberry pancake'>>> hot_cakes
['banana pancake', 'chocolate chip']

Eficiencia, es todo lo que queremos

¿Te ha sucedido que pasar varios minutos buscando las llaves porque no recuerdas dónde quedaron? ¿O tardas mucho en acomodar tu casa porque dejaste que el desorden te venciera?

Algo así sucede en la memoria de nuestras computadoras cuando comenzamos a guardar datos de una forma descuidada, ya que los datos se encuentran dispersos y al no haber un orden cada vez tomará más tiempo acceder a los mismos.

En cambio las estructuras de datos poseen características únicas que hacen más fácil el acceso de los datos que almacenan y en conjunto a los algoritmos adecuados reducirán ese proceso de 10 segundos a solo 1 un segundo o incluso menos.

# Ejemplo utilizando un queue sencillo>>> from queue import Queue
>>> hot_cakes = Queue()

>>> hot_cakes.append('banana pancake')
>>> hot_cakes.append('chocolate chip')
>>> hot_cakes.append('blueberry pancake')

>>> hot_cakes
['banana pancake', 'chocolate chip', 'blueberry pancake']

>>> hot_cakes.pop()
'banana pancake'>>> hot_cakes
['chocolate chip', 'blueberry pancake']

Primero pienso, luego programo

Las estructuras de datos no son mágicas y tampoco te brindarán la posibilidad de optimizar tu proyecto por sí mismas. Esto implica un razonamiento profundo, entender desde antes qué es lo que quieres lograr, las restricciones de tu problema a resolver y comprender las características de las diferentes estructuras de datos que podrías implementar.

Por ello debes entender primero que existen dos grupos principales de estructuras de datos: lineales y complejas (no-lineales). Podrás imaginarte que las primeras que debes conocer son las lineales, de las cuales los array, nodos, linked lists, stacks y queues forman parte de este grupo.


¿Quieres aprender sobre sus características e implementarlas? Entonces te espero en la primera clase del Curso de Estructuras de Datos Lineales con Python para que marques ese antes y después de tu carrera como pythonista profesional para data science.

Héctor Daniel
Héctor Daniel
Terranigma

59137Puntos

hace 3 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
4
33148Puntos

Te vamos a extrañar u.u

3
26195Puntos

Buen curso, aún no lo termino, pero hasta donde voy me gusta la manera de explicar, medio teórica-medio práctica.
Muchas de estas clases se deben tratar con más teoría que práctica, pero en este curso se ve una pequeña armonía entre ambas.

1
3 años

Este comentario me gusta, ya que me motiva a tomar el curso sabiendo que está bien balanceado entre lo teórico y lo practico.

2
33173Puntos

Qué buen curso! Hace muy poco empecé a realizar cursos de programación, sin conocimiento previo, y mi humilde opinión es que debe darse una importancia fundamental a las estructuras de datos en los primeros pasos de la programación. Ello por cuanto, de qué sirve aprender ciclos, métodos, funciones si no es en relación a estructuras de datos.

2
10861Puntos

Las estructura de datos son la forma en al que organizamos la data para que podamos usarla de forma eficiente.
Nos permiten guardar, actualizar y manipular la información de forma rápida y eficiente.
Me va a encantar el curso!! 😃

2

Wuaaaaao, justo eran dudas que me surgieron luego de terminar el curso básico de Python, con el tiempo le perdí interés, pero ahora ya conozco la respuesta 😄 XD

1
10842Puntos

Buen contenido, voy a revisar ahora mismo ese curso!!

1
7210Puntos

gracias, muy buen post!!