← Python EspañolChapter 06 of 13

Estructuras de Datos

## Objetivos de Aprendizaje - Dominar listas, tuplas, conjuntos y diccionarios - Entender cuándo usar cada estructura de datos - Aprender operaciones y métodos comunes ## Listas ### Crear Listas ```python vacia = [] numeros = [1, 2, 3, 4, 5] mixta = [1, "hola", 3.14, True] anidada = [[1, 2], [3, 4]] ``` ### Acceder a Elementos ```python frutas = ["manzana", "plátano", "cereza"] print(frutas[0]) # manzana print(frutas[-1]) # cereza print(frutas[1:3]) # ['plátano', 'cereza'] print(frutas[:2]) # ['manzana', 'plátano'] print(frutas[1:]) # ['plátano', 'cereza'] ``` ### Modificar Listas ```python frutas = ["manzana", "plátano", "cereza"] # Añadir frutas.append("dátil") # Al final frutas.insert(1, "albaricoque") # En índice frutas.extend(["mora", "higo"]) # Añadir varios # Eliminar frutas.remove("plátano") # Eliminar por valor popped = frutas.pop() # Eliminar y devolver último popped = frutas.pop(0) # Eliminar y devolver en índice del frutas[0] # Eliminar en índice frutas.clear() # Eliminar todos # Modificar frutas[0] = "aguacate" # Cambiar en índice frutas[1:3] = ["arándano", "melón"] # Reemplazar segmento ``` ### Métodos de Lista ```python numeros = [3, 1, 4, 1, 5, 9, 2, 6] numeros.sort() # Ordenar en lugar sorted(numeros) # Devolver nueva lista ordenada numeros.reverse() # Invertir en lugar numeros.index(4) # Índice de primera aparición numeros.count(1) # Contar ocurrencias numeros.copy() # Copia superficial ``` ### Funciones de Lista ```python numeros = [3, 1, 4, 1, 5, 9, 2, 6] len(numeros) # 8 min(numeros) # 1 max(numeros) # 9 sum(numeros) # 31 any(numeros) # True (truthy si alguno) all(numeros) # True (truthy si todos) ``` ### List Comprehensions ```python cuadrados = [x ** 2 for x in range(5)] # [0, 1, 4, 9, 16] pares = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8] matriz = [[i * j for j in range(3)] for i in range(3)] # [[0, 0, 0], [0, 1, 2], [0, 2, 4]] ``` ## Tuplas ### Crear Tuplas ```python vacia = () unico = (42,) # ¡Nota la coma! punto = (3, 4) mixta = (1, "hola", 3.14) anidada = ((1, 2), (3, 4)) ``` ### Indexación de Tuplas ```python punto = (3, 4, 5) print(punto[0]) # 3 print(punto[-1]) # 5 print(punto[1:3]) # (4, 5) ``` ### Métodos de Tupla ```python punto = (3, 4, 3, 5, 3) punto.count(3) # 3 (conteo de 3) punto.index(4) # 1 (primer índice de 4) ``` ### Por qué Tuplas? - Inmutables (no se pueden modificar) - Más rápidas que las listas - Pueden usarse como claves de diccionario - Protegen integridad de datos ```python # Inmutable - no puedes hacer esto: # punto[0] = 10 # ¡TypeError! # Usar como claves de diccionario ubicaciones = { (40.7128, 74.0060): "Nueva York", (51.5074, 0.1278): "Londres", } ``` ### Desempaquetado de Tuplas ```python x, y, z = (1, 2, 3) print(x, y, z) # 1 2 3 # Desempaquetado extendido primero, *medio, ultimo = [1, 2, 3, 4, 5] print(primero) # 1 print(medio) # [2, 3, 4] print(ultimo) # 5 ``` ## Conjuntos ### Crear Conjuntos ```python vacio = set() # ¡No {} - eso es un dict! numeros = {1, 2, 3, 4, 5} mixto = {1, "hola", 3.14} desde_lista = set([1, 2, 2, 3, 3]) # {1, 2, 3} ``` ### Operaciones de Conjunto ```python a = {1, 2, 3, 4} b = {3, 4, 5, 6} # Unión print(a | b) # {1, 2, 3, 4, 5, 6} print(a.union(b)) # Same # Intersección print(a & b) # {3, 4} print(a.intersection(b)) # Same # Diferencia print(a - b) # {1, 2} print(a.difference(b)) # Same # Diferencia Simétrica print(a ^ b) # {1, 2, 5, 6} print(a.symmetric_difference(b)) # Same ``` ### Métodos de Conjunto ```python s = {1, 2, 3} s.add(4) # Añadir un elemento s.update([5, 6]) # Añadir varios s.remove(3) # Eliminar (lanza error si no existe) s.discard(10) # Eliminar (sin error si no existe) s.pop() # Eliminar y devolver elemento arbitrario s.clear() # Eliminar todos ``` ### Comparaciones de Conjuntos ```python a = {1, 2, 3} b = {1, 2} c = {1, 2, 3, 4} print(a.issubset(b)) # False print(b.issubset(a)) # True (b es subconjunto de a) print(a.issuperset(b)) # True (a es superconjunto de b) print(a.isdisjoint(b)) # False (comparten elementos) ``` ### Cuándo Usar Conjuntos - Eliminar duplicados - Pruebas de membresía (rápido) - Operaciones matemáticas de conjuntos - Encontrar elementos únicos ```python # Eliminar duplicados elementos = [1, 2, 2, 3, 3, 3] unicos = set(elementos) print(list(unicos)) # [1, 2, 3] # Membresía rápida permitidos = {"admin", "editor", "visor"} if "admin" in permitidos: print("Acceso concedido") ``` ## Diccionarios ### Crear Diccionarios ```python vacio = {} persona = {"Nombre": "Ana", "edad": 25} dict(edad=25, nombre="Bob") # Desde argumentos de palabra clave dict([("a", 1), ("b", 2)]) # Desde lista de tuplas {**{"a": 1}, **{"b": 2}} # Desde fusión ``` ### Acceso a Diccionario ```python persona = {"Nombre": "Ana", "edad": 25, "ciudad": "Madrid"} print(persona["Nombre"]) # Ana print(persona.get("Nombre")) # Ana print(persona.get("trabajo", "Desconocido")) # Desconocido (por defecto) ``` ### Modificar Diccionarios ```python persona = {"Nombre": "Ana", "edad": 25} # Añadir/Actualizar persona["ciudad"] = "Madrid" persona.update({"edad": 26, "trabajo": "Ingeniera"}) # Eliminar del persona["trabajo"] popped = persona.pop("edad") persona.clear() ``` ### Métodos de Diccionario ```python persona = {"Nombre": "Ana", "edad": 25, "ciudad": "Madrid"} persona.keys() # dict_keys(['Nombre', 'edad', 'ciudad']) persona.values() # dict_values(['Ana', 25, 'Madrid']) persona.items() # dict_items([('Nombre', 'Ana'), ...]) persona.setdefault("país", "España") # Establecer si no existe ``` ### Vistas de Diccionario ```python persona = {"Nombre": "Ana", "edad": 25} # Las vistas reflejan cambios claves = persona.keys() persona["ciudad"] = "Madrid" print(list(claves)) # ['Nombre', 'edad', 'ciudad'] ``` ### Iteración de Diccionario ```python persona = {"Nombre": "Ana", "edad": 25, "ciudad": "Madrid"} # Claves for clave in persona: print(clave) # Pares clave-valor for clave, valor in persona.items(): print(f"{clave}: {valor}") ``` ### Dictionary Comprehensions ```python cuadrados = {x: x ** 2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} palabras = ["manzana", "plátano", "cereza"] longitudes = {palabra: len(palabra) for palabra in palabras} # {'manzana': 8, 'plátano': 7, 'cereza': 6} ``` ## Elegir Estructuras de Datos | Estructura | Ordenada | Mutable | Duplicados | Caso de Uso | |-----------|---------|---------|------------|------------| | Lista | Sí | Sí | Sí | Secuencia de elementos | | Tupla | Sí | No | Sí | Datos fijos, coordenadas | | Conjunto | No | Sí | No | Elementos únicos, matemáticas | | Dict | Sí* | Sí | Claves: No | Mapeo clave-valor | *Nota: Los dicts de Python 3.7+ mantienen orden de inserción ## Resumen - **Lista**: Ordenada, mutable, permite duplicados - usar para secuencias - **Tupla**: Ordenada, inmutable, permite duplicados - usar para datos fijos - **Conjunto**: No ordenado, mutable, sin duplicados - usar para elementos únicos - **Dict**: Pares clave-valor, ordenado - usar para mapeos - List comprehensions: `[x for x in iterable]` - Dict comprehensions: `{k: v for k, v in items}` - Elige la estructura de datos correcta para tus necesidades

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →