Estructuras de datos y algoritmos en Python
No importa qué tipo de programa de Python esté escribiendo, es muy probable que descubra que su programa necesita manejar algunos datos. A veces, los datos deben almacenarse, analizarse, manipularse, ordenarse, transferirse o incluso usarse como entrada en modelos de aprendizaje automático. Dado que los datos son tan importantes en el mundo de Python, es valioso estudiar cuidadosamente cómo manejarlos de manera correcta y eficiente.
En este artículo, discutiremos estructuras de datos y los formatos estándar para organizar y almacenar datos en Python. también discutiremos algoritmos, los conjuntos ordenados de instrucciones que se utilizan para procesar datos. Hablaremos sobre estos dos conceptos e ilustraremos los conceptos con el código de trabajo de Python. ¡Vamos a empezar!
Contenido
Primeros pasos: una lista y una tupla.
Comencemos definiendo algunos datos simples en Python:
Aquí, creamos un objeto en Python llamado my_list. Este objeto es una colección de números. Pero más precisamente, este objeto se llama lista. Una lista es simplemente una colección de elementos, almacenados juntos en una sola variable. Creamos listas en Python usando los corchetes ([ and ]) y separando los elementos individuales con comas.
Esta no es la única forma de crear una colección de elementos en Python. Intentemos usar paréntesis en lugar de corchetes:
Este nuevo objeto, llamado my_tuple, contiene los mismos números que my_list. Pero como usamos paréntesis en lugar de corchetes, llamamos a este objeto un tupla en lugar de una lista.
Comparación de listas y tuplas.
Las listas y las tuplas son similares en muchos aspectos. Por ejemplo, podemos acceder a elementos individuales en listas y tuplas de la misma manera:
print(my_list[3])
print(my_tuple[3])
Aquí, imprimimos el elemento con el índice 3 tanto en my_list como en my_tuple, y vemos el mismo resultado para ambos comandos (8). Puedes ver que de esta manera, las listas y las tuplas funcionan igual.
Pero las listas y las tuplas no son lo mismo en todos los sentidos. Veamos qué sucede si intentamos cambiar un valor en nuestra lista y nuestra tupla:
my_list[3] = 7
my_tuple[3] = 7
La primera línea aquí redefine el 8 en my_list para que sea igual a 7. La segunda línea parece que debería hacer lo mismo para my_tuple, pero si intenta ejecutarlo, obtendrá un error. Esto se debe a que las listas y las tuplas tienen reglas diferentes sobre la asignación de valores: se permite asignar nuevos valores a los elementos de las listas, pero no se permite asignar nuevos valores a los elementos de las tuplas. La palabra técnica para esta propiedad es mutabilidad; dado que los elementos de la lista se pueden cambiar, decimos que las listas son mudabley dado que los valores de las tuplas no se pueden cambiar, decimos que son inmutable. Las tuplas y las listas pueden parecer similares, pero la diferencia en su mutabilidad muestra que no son idénticas.
Las listas y las tuplas son dos formatos ligeramente diferentes para almacenar datos en Python. En otras palabras, son dos diferentes. estructuras de datos. Familiarizarse con los tipos de estructuras de datos que se pueden crear en Python lo ayudará a trabajar con datos de manera más efectiva.
Ejemplo 1: ordenar una lista de números.
Ahora que hemos presentado cómo almacenar datos en dos tipos de estructuras de datos, hagamos más con los datos. Comencemos definiendo nuestra lista nuevamente:
Puede ver que esta lista parece estar en un orden aleatorio: no está ordenada de menor a mayor ni de mayor a menor. A menudo, tendremos la necesidad de clasificar los datos, por lo que será útil comprender los conjuntos sistemáticos de instrucciones, o algoritmosque se utilizan para tareas como ordenar.
Piensa en cómo podrías escribir código para ordenar una lista de números como este del más pequeño al más grande. Una cosa con la que podría comenzar es un simple intercambio: tome dos números que están fuera de orden y cámbielos de lugar. Comencemos con 3 y 1, los elementos con índice 1 y 2, respectivamente, en nuestra lista:
the_index = 1
if my_list[the_index] > my_list[the_index+1]:
my_list[the_index],my_list[the_index+1] = my_list[the_index+1],my_list[the_index]
Este código es sencillo: comprueba si un elemento de la lista en particular es mayor que el siguiente elemento de la lista. Si algún elemento es mayor que su sucesor en la lista, entonces esos dos elementos están fuera de servicio y, por lo tanto, el código los intercambia. Si ejecuta este código, luego ejecute print(my_list), obtendrá el siguiente resultado:
La lista aún no está completamente ordenada, pero hicimos una mejora: intercambiamos el 3 con el 1 para que al menos esos dos elementos estén ordenados de menor a mayor.
Si hacemos intercambios repetidos como este, eventualmente se ordenará toda la lista. Ese es el objetivo del siguiente código:
number_of_passes = 0
while number_of_passes < (len(my_list)):
the_index = 0
while the_index < (len(my_list)-1):
if my_list[the_index] > my_list[the_index+1]:
my_list[the_index],my_list[the_index+1] = my_list[the_index+1],my_list[the_index]
the_index +=1
number_of_passes+=1
Puede ver el mismo código que usamos para intercambiar dos elementos en el medio de este fragmento de código. Pero en lugar de intercambiar solo dos elementos, este código contiene bucles anidados que realizan intercambios repetidos de todos los elementos de nuestra lista, suficientes veces para que finalmente se ordene toda la lista. Después de ejecutar este código, puede ejecutar print(my_list) para ver que la lista está ordenada correctamente de menor a mayor.
Este proceso para ordenar una lista tiene un nombre especial: se llama hechizo de burbuja, y es un algoritmo simple para ordenar datos. A medida que avanza en su educación de Python, puede aprender más algoritmos como la ordenación de burbujas y cómo usarlos bien. También puede obtener información sobre más estructuras de datos, como listas y tuplas, y cómo cada estructura de datos puede ayudarlo a escribir código de Python efectivo.
Ejemplo 2: ordenar una lista de tuplas.
Ahora que está familiarizado con las listas y las tuplas (dos estructuras de datos) y la ordenación de burbujas (un algoritmo), probemos un ejemplo que los combine a todos. El siguiente código define una lista cuyos elementos individuales son todos tuplas. Luego, usa la ordenación de burbujas para ordenar la lista de menor a mayor en función del primer elemento de cada tupla:
list_of_tuples = [(3,5),(1,9),(2,8),(0,5),(9,6)]
number_of_passes = 0
while number_of_passes < (len(list_of_tuples)):
the_index = 0
while the_index < (len(list_of_tuples)-1):
if list_of_tuples[the_index][0] > list_of_tuples[the_index+1][0]:
list_of_tuples[the_index],list_of_tuples[the_index+1] = list_of_tuples[the_index+1],list_of_tuples[the_index]
the_index +=1
number_of_passes+=1
print(list_of_tuples)
Después de ejecutar este código, verá el siguiente resultado:
[(0, 5), (1, 9), (2, 8), (3, 5), (9, 6)]
Puede ver que nuestra lista de tuplas está ordenada de menor a mayor según el primer elemento de cada tupla. (La primera tupla tiene el primer elemento más pequeño, 0, la segunda tupla tiene el segundo primer elemento más pequeño, 1, y así sucesivamente, y luego la última tupla tiene el primer elemento más grande, 9). ¡Felicitaciones! Puede trabajar con múltiples estructuras de datos en Python y puede implementar un algoritmo de clasificación.
Más información sobre estructuras de datos y algoritmos.
Las estructuras de datos pueden parecer simples y los algoritmos que usamos para trabajar con ellas pueden parecer mundanos. Pero dominar algunas de estas ideas simples puede ayudarlo a escribir código Python mejor, de manera más eficiente y más rápida. Cuando llegue a las ideas más avanzadas en el mundo de Python, se alegrará de haber dominado algunos de estos conceptos básicos.
Si encuentra estos temas interesantes o útiles, explore el nanogrado de estructuras de datos y algoritmos de Udacity. Puede utilizar las habilidades y los conocimientos fundamentales adquiridos en el curso para crear proyectos de Python en cualquier nivel de sofisticación.
COMIENZA A APRENDER