Tutorial de Estructuras de Datos en Python para Principiantes
Tutorial de Estructuras de Datos en Python para Principiantes
¡Hola! Te ayudo a crear un tutorial completo sobre estructuras de datos en Python. Este tutorial está diseñado específicamente para principiantes.
📚 Tabla de Contenidos
1. Introducción a las Estructuras de Datos <a name="introducción"></a>
Las estructuras de datos son formas de organizar y almacenar datos para que puedan ser utilizados eficientemente.
# Python tiene estructuras de datos incorporadas: # - Listas: [1, 2, 3] # - Tuplas: (1, 2, 3) # - Diccionarios: {'a': 1, 'b': 2} # - Conjuntos: {1, 2, 3}
2. Listas <a name="listas"></a>
Las listas son colecciones ordenadas y mutables.
# Crear una lista frutas = ["manzana", "banana", "cereza"] numeros = [1, 2, 3, 4, 5] # Acceder a elementos print(frutas[0]) # manzana print(frutas[-1]) # cereza (último elemento) # Modificar elementos frutas[1] = "naranja" print(frutas) # ['manzana', 'naranja', 'cereza'] # Métodos útiles frutas.append("uva") # Agregar al final frutas.insert(1, "mango") # Insertar en posición frutas.remove("manzana") # Remover elemento frutas.pop() # Remover último elemento # Slicing (rebanado) sub_lista = numeros[1:4] # [2, 3, 4]
3. Tuplas <a name="tuplas"></a>
Las tuplas son como listas pero inmutables (no se pueden modificar).
# Crear una tupla coordenadas = (10, 20) colores = ("rojo", "verde", "azul") # Acceder a elementos print(coordenadas[0]) # 10 # Las tuplas no se pueden modificar # coordenadas[0] = 15 # Esto daría error # Usos comunes: datos que no deben cambiar punto = (x, y) rgb = (255, 0, 0)
4. Diccionarios <a name="diccionarios"></a>
Los diccionarios almacenan pares clave-valor.
# Crear un diccionario estudiante = { "nombre": "Ana", "edad": 20, "curso": "Python" } # Acceder a valores print(estudiante["nombre"]) # Ana print(estudiante.get("edad")) # 20 # Agregar o modificar estudiante["nota"] = 95 estudiante["edad"] = 21 # Métodos útiles claves = estudiante.keys() # Todas las claves valores = estudiante.values() # Todos los valores pares = estudiante.items() # Todos los pares clave-valor # Recorrer un diccionario for clave, valor in estudiante.items(): print(f"{clave}: {valor}")
5. Conjuntos <a name="conjuntos"></a>
Los conjuntos son colecciones no ordenadas de elementos únicos.
# Crear un conjunto numeros = {1, 2, 3, 4, 5} vocales = {'a', 'e', 'i', 'o', 'u'} # Los conjuntos eliminan duplicados automáticamente duplicados = {1, 2, 2, 3, 3, 3} print(duplicados) # {1, 2, 3} # Operaciones de conjuntos a = {1, 2, 3} b = {3, 4, 5} print(a.union(b)) # {1, 2, 3, 4, 5} print(a.intersection(b)) # {3} print(a.difference(b)) # {1, 2}
6. Pilas (Stacks) <a name="pilas"></a>
Las pilas siguen el principio LIFO (Last In, First Out).
# Implementación con lista pila = [] # Apilar (push) pila.append(1) pila.append(2) pila.append(3) print(pila) # [1, 2, 3] # Desapilar (pop) ultimo = pila.pop() print(ultimo) # 3 print(pila) # [1, 2]
7. Colas (Queues) <a name="colas"></a>
Las colas siguen el principio FIFO (First In, First Out).
from collections import deque # Crear una cola cola = deque() # Encolar cola.append(1) cola.append(2) cola.append(3) print(cola) # deque([1, 2, 3]) # Desencolar primero = cola.popleft() print(primero) # 1 print(cola) # deque([2, 3])
8. Listas Enlazadas <a name="listas-enlazadas"></a>
class Nodo: def __init__(self, dato): self.dato = dato self.siguiente = None class ListaEnlazada: def __init__(self): self.cabeza = None def agregar(self, dato): nuevo_nodo = Nodo(dato) if self.cabeza is None: self.cabeza = nuevo_nodo else: actual = self.cabeza while actual.siguiente: actual = actual.siguiente actual.siguiente = nuevo_nodo def mostrar(self): actual = self.cabeza while actual: print(actual.dato, end=" -> ") actual = actual.siguiente print("None") # Ejemplo de uso lista = ListaEnlazada() lista.agregar(1) lista.agregar(2) lista.agregar(3) lista.mostrar() # 1 -> 2 -> 3 -> None
9. Árboles Binarios <a name="árboles"></a>
class NodoArbol: def __init__(self, dato): self.dato = dato self.izquierdo = None self.derecho = None class ArbolBinario: def __init__(self): self.raiz = None def insertar(self, dato): if self.raiz is None: self.raiz = NodoArbol(dato) else: self._insertar_recursivo(dato, self.raiz) def _insertar_recursivo(self, dato, nodo_actual): if dato < nodo_actual.dato: if nodo_actual.izquierdo is None: nodo_actual.izquierdo = NodoArbol(dato) else: self._insertar_recursivo(dato, nodo_actual.izquierdo) else: if nodo_actual.derecho is None: nodo_actual.derecho = NodoArbol(dato) else: self._insertar_recursivo(dato, nodo_actual.derecho) def inorden(self, nodo): if nodo: self.inorden(nodo.izquierdo) print(nodo.dato, end=" ") self.inorden(nodo.derecho) # Ejemplo arbol = ArbolBinario() arbol.insertar(5) arbol.insertar(3) arbol.insertar(7) arbol.insertar(2) arbol.insertar(4) arbol.inorden(arbol.raiz) # 2 3 4 5 7
10. Ejercicios Prácticos <a name="ejercicios"></a>
Ejercicio 1: Contador de Palabras
def contar_palabras(texto): palabras = texto.split() contador = {} for palabra in palabras: contador[palabra] = contador.get(palabra, 0) + 1 return contador texto = "hola mundo hola python mundo programacion" print(contar_palabras(texto))
Ejercicio 2: Sistema de Inventario
class Inventario: def __init__(self): self.productos = {} def agregar_producto(self, nombre, cantidad): self.productos[nombre] = self.productos.get(nombre, 0) + cantidad def vender_producto(self, nombre, cantidad): if nombre in self.productos and self.productos[nombre] >= cantidad: self.productos[nombre] -= cantidad return True return False def mostrar_inventario(self): for producto, cantidad in self.productos.items(): print(f"{producto}: {cantidad}") # Uso inventario = Inventario() inventario.agregar_producto("manzanas", 50) inventario.agregar_producto("naranjas", 30) inventario.vender_producto("manzanas", 10) inventario.mostrar_inventario()
Ejercicio 3: Calculadora de Expresiones con Pila
def calcular_expresion(expresion): pila = [] tokens = expresion.split() for token in tokens: if token.isdigit(): pila.append(int(token)) else: b = pila.pop() a = pila.pop() if token == '+': pila.append(a + b) elif token == '-': pila.append(a - b) elif token == '*': pila.append(a * b) elif token == '/': pila.append(a / b) return pila[0] print(calcular_expresion("3 4 + 2 *")) # (3 + 4) * 2 = 14
📝 Consejos Finales
Practica regularmente: La práctica es clave para entender las estructuras de datos
Comienza con lo simple: Domina listas y diccionarios antes de estructuras más complejas
Visualiza: Dibuja las estructuras para entender cómo funcionan
Experimenta: Modifica el código y observa qué pasa
Resuelve problemas: Usa estas estructuras en proyectos reales
Comentarios
Publicar un comentario