Saltar a contenido

icono Estructuras de datos

Las estructuras de datos son una parte fundamental de la programación, ya que permiten organizar y gestionar de manera eficiente los datos en la memoria. En Python, existen varias estructuras de datos integradas que son ampliamente utilizadas debido a su flexibilidad. Aunque las principales estructuras de datos que se suelen manejar incluyen listas, tuplas, conjuntos, diccionarios y clases, nosotros por los conocimientos que tenemos de programación y los usos que vamos a darle, sólo aprenderemos lo básico de listas y diccionarios.

Listas

Las listas son colecciones ordenadas y mutables de elementos. Esto significa que se pueden modificar (agregar, eliminar o cambiar elementos) después de haber sido creadas.

Lista

Cada elemento de la lista ocupa una posición, llamada índice, a la que podemos acceder contando desde el 0 hasta el número máximo de elementos – 1. En este caso, tenemos tres elementos, por lo que sus índices serán 0, 1 y 2.

Las listas en Python se definen utilizando corchetes [] y los elementos se separan por comas.

\# Crear una lista
frutas = \["manzana", "platano", "cereza"\]

# Acceder a elementos de la lista
print(frutas\[0\])  # Salida: manzana
print(frutas\[1\])  # Salida: banana

# Modificar un elemento de la lista
frutas\[1\] = "kiwi"
print(frutas)  # Salida: \['manzana', 'kiwi', 'cereza'\]

También disponemos de muchas funciones integradas en el lenguaje, que nos permiten realizar operaciones comunes con las listas.

\# Agregar elementos
frutas.append("naranja")
print(frutas)  # Salida: \['manzana', 'kiwi', 'cereza', 'naranja'\]

# Eliminar elementos
frutas.remove("kiwi")
print(frutas)  # Salida: \['manzana', 'cereza', 'naranja'\]

# Insertar elementos en una posición específica
frutas.insert(1, "pera")
print(frutas)  # Salida: \['manzana', 'pera', 'cereza', 'naranja'\]

# Obtener la longitud de la lista
longitud = len(frutas)
print(longitud)  # Salida: 4

Por último, necesitamos saber cómo podemos recorrer una lista para poder realizar comprobaciones u operaciones sobre cada uno de los elementos que contiene.

\# Definir una lista
frutas = \["manzana", "pera", "cereza"\]

# Recorrer la lista con un bucle for
for fruta in frutas:
    print(fruta)

En este ejemplo, el bucle for itera sobre cada elemento de la lista frutas, asignando cada elemento a la variable fruta en cada iteración, y luego imprime el valor de fruta.

Esto mismo también puede hacerse recorriendo la lista por medio de un índice que indica la posición que ocupa cada elemento en la lista:

\# Definir una lista
frutas = \["manzana", "pera", "cereza"\]

# Recorrer la lista con un bucle for
for indice in range(0,len(frutas)):
    print(frutas\[indice\])

Actividades

📝 AA4.15 Estructuras de control

(C.ESP1 / CE1.2 / IC1-3p)

  1. Sumar todos los elementos de una lista de números

    Escribe un programa que defina una lista de números y calcule la suma de todos los elementos de la lista.

    Solución
    # Definir una lista de números
    numeros = [3, 5, 7, 9, 11]
    
    # Inicializar la suma
    suma_total = 0
    
    # Recorrer la lista y sumar los elementos
    for numero in numeros:
        suma_total += numero
    
    # Mostrar el resultado
    print(f"La suma de todos los números es: {suma_total}")
    

    Primero definimos una lista de números. Luego inicializamos la variable suma_total en cero. Usamos un bucle for para recorrer la lista y sumar cada elemento. Finalmente, mostramos el resultado con print().

  2. Encontrar el número más grande en una lista

    Escribe un programa que defina una lista de números y encuentre el número más grande de la lista.

    Solución
    # Definir una lista de números
    numeros = [23, 56, 12, 89, 4]
    
    # Inicializar el número mayor
    mayor = numeros[0]
    
    # Recorrer la lista
    for numero in numeros:
        if numero > mayor:
            mayor = numero
    
    # Mostrar el número mayor
    print(f"El número mayor es: {mayor}")
    

    Asignamos el primer elemento como valor inicial del mayor y lo comparamos con el resto usando un bucle for.

  3. Reemplazar números negativos por 0

    Escribe un programa que defina una lista de números y reemplace los negativos por 0.

    Solución
    # Definir una lista con números positivos y negativos
    numeros = [10, -5, 3, -7, 0, 8]
    
    # Reemplazar los negativos por 0
    for i in range(len(numeros)):
        if numeros[i] < 0:
            numeros[i] = 0
    
    # Mostrar la lista modificada
    print(f"Lista después de reemplazar negativos: {numeros}")
    

    Recorremos la lista usando índices y sustituimos los valores negativos por 0.

  4. Contar cuántas veces aparece un número en una lista

    Escribe un programa que pida un número al usuario y cuente cuántas veces aparece en una lista.

    Solución
    # Definir una lista de números
    numeros = [4, 2, 7, 4, 9, 4, 1, 4]
    
    # Pedir un número al usuario
    numero = int(input("Introduce un número: "))
    
    # Contar apariciones
    contador = numeros.count(numero)
    
    # Mostrar el resultado
    print(f"El número {numero} aparece {contador} veces en la lista.")
    

    Usamos el método .count() para contar cuántas veces aparece el número.

  5. Eliminar elementos repetidos de una lista

    Escribe un programa que elimine los elementos duplicados de una lista.

    Solución
    # Definir una lista con números repetidos
    numeros = [1, 2, 2, 3, 4, 4, 5, 6, 6]
    
    # Crear una nueva lista sin duplicados
    numeros_sin_repetidos = []
    
    # Recorrer la lista original
    for numero in numeros:
        if numero not in numeros_sin_repetidos:
            numeros_sin_repetidos.append(numero)
    
    # Mostrar el resultado
    print(f"Lista sin repetidos: {numeros_sin_repetidos}")
    

    Se crea una nueva lista y solo se añaden los elementos que aún no existen en ella.

  6. Invertir una lista

    Escribe un programa que invierta el orden de una lista.

    Solución
    # Definir una lista de números
    numeros = [1, 2, 3, 4, 5]
    
    # Invertir la lista
    numeros_invertidos = numeros[::-1]
    
    # Mostrar la lista invertida
    print(f"Lista invertida: {numeros_invertidos}")
    

    Usamos slicing para recorrer la lista desde el final al principio.

  7. Ordenar una lista de menor a mayor (sin sort())

    Escribe un programa que ordene una lista sin usar funciones predefinidas.

    Solución
    # Definir una lista de números
    numeros = [5, 2, 9, 1, 7]
    
    # Algoritmo de la burbuja
    for i in range(len(numeros)):
        for j in range(0, len(numeros) - i - 1):
            if numeros[j] > numeros[j + 1]:
                numeros[j], numeros[j + 1] = numeros[j + 1], numeros[j]
    
    # Mostrar la lista ordenada
    print(f"Lista ordenada: {numeros}")
    

    El algoritmo de la burbuja intercambia elementos adyacentes si están desordenados.

  8. Combinar dos listas

    Escribe un programa que combine dos listas en una sola.

    Solución
    # Definir dos listas
    lista1 = [1, 3, 5]
    lista2 = [2, 4, 6]
    
    # Combinar las listas
    lista_combinada = lista1 + lista2
    
    # Mostrar el resultado
    print(f"Lista combinada: {lista_combinada}")
    

    El operador + concatena ambas listas.

  9. Verificar si una lista está vacía

    Escribe un programa que determine si una lista está vacía.

    Solución
    # Definir una lista
    lista = []
    
    # Verificar si está vacía
    if len(lista) == 0:
        print("La lista está vacía.")
    else:
        print("La lista no está vacía.")
    

    Usamos len() para comprobar si la lista tiene elementos.

  10. Crear una lista con los cuadrados del 1 al 10

    Escribe un programa que cree una lista con los cuadrados del 1 al 10.

    Solución
    # Crear una lista vacía
    cuadrados = []
    
    # Calcular los cuadrados
    for numero in range(1, 11):
        cuadrados.append(numero ** 2)
    
    # Mostrar la lista
    print(f"Los cuadrados son: {cuadrados}")
    

    Calculamos el cuadrado de cada número y lo añadimos a la lista.

  11. Contar vocales en una lista de caracteres

    Escribe un programa que cuente cuántas vocales hay en una lista.

    Solución
    # Definir una lista de caracteres
    caracteres = ['a', 'b', 'c', 'e', 'i', 'o', 'u', 'x', 'z']
    
    # Lista de vocales
    vocales = ['a', 'e', 'i', 'o', 'u']
    
    # Contador
    contador_vocales = 0
    
    # Contar vocales
    for caracter in caracteres:
        if caracter in vocales:
            contador_vocales += 1
    
    # Mostrar el resultado
    print(f"Hay {contador_vocales} vocales en la lista.")
    

    Se compara cada carácter con una lista de vocales.

  12. Concatenar palabras de una lista

    Escribe un programa que una todas las palabras de una lista en una sola cadena.

    Solución
    # Definir una lista de palabras
    palabras = ["Hola", "mundo", "esto", "es", "Python"]
    
    # Cadena vacía
    cadena_concatenada = ""
    
    # Concatenar palabras
    for palabra in palabras:
        cadena_concatenada += palabra + " "
    
    # Eliminar espacio final
    cadena_concatenada = cadena_concatenada.strip()
    
    # Mostrar el resultado
    print(f"Cadena resultante: {cadena_concatenada}")
    

    Se van uniendo las palabras y luego se elimina el espacio sobrante.

  13. Convertir una lista de caracteres en una palabra

    Escribe un programa que convierta una lista de caracteres en una cadena.

    Solución
    # Definir una lista de caracteres
    letras = ['P', 'y', 't', 'h', 'o', 'n']
    
    # Convertir en cadena
    palabra = ''.join(letras)
    
    # Mostrar la palabra
    print(f"La palabra formada es: {palabra}")
    

    El método join() une todos los caracteres en una sola cadena.

💡 AAP4.16 Ampliación Diccionarios

(C.ESP1 / CE1.2 / IC1-3p)

Los diccionarios son colecciones desordenadas de pares clave-valor. Cada clave debe ser única, y se utiliza para acceder al valor asociado. Los diccionarios se definen utilizando llaves {} y pares clave-valor separados por dos puntos :.

Por ejemplo vamos a crear un diccionario persona que almacene los datos personales:

\# Crear un diccionario
persona = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Madrid"
}

# Acceder a valores por clave
print(persona\["nombre"\])  # Salida: Juan
print(persona\["edad"\])  # Salida: 30

# Modificar un valor
persona\["edad"\] = 31
print(persona)  # Salida: {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid'}

# Agregar un nuevo par clave-valor
persona\["profesion"\] = "Ingeniero"
print(persona)  # Salida: {'nombre': 'Juan', 'edad': 31, 'ciudad': 'Madrid', 'profesion': 'Ingeniero'}

# Eliminar un par clave-valor
del persona\["ciudad"\]
print(persona)  # Salida: {'nombre': 'Juan', 'edad': 31, 'profesion': 'Ingeniero'}

De la misma manera que hicimos para las listas, también podemos recorrer los diccionarios. Recorrer un diccionario implica iterar sobre sus pares clave-valor. En Python, esto se puede hacer utilizando el método items(), que devuelve una vista de pares clave-valor del diccionario.

\# Definir un diccionario
persona = {
    "nombre": "Juan",
    "edad": 30,
    "ciudad": "Madrid"
}

# Recorrer el diccionario con un bucle for
for clave, valor in persona.items():
    print(f"{clave}: {valor}")

En este ejemplo, el método items() se utiliza para obtener una vista de pares clave-valor del diccionario persona. El bucle for itera sobre cada par, asignando la clave a clave y el valor a valor, y luego imprime ambos.

Pero puede que necesitemos recorrer sólo claves o sólo valores. Para esos casos también disponemos de métodos que agilizan estos procesos:

\# Recorrer solo las claves del diccionario
for clave in persona.keys():
    print(clave)

# Recorrer solo los valores del diccionario
for valor in persona.values():
    print(valor)

En el primer ejemplo, el método keys() se utiliza para obtener una vista de las claves del diccionario persona. En el segundo ejemplo, el método values() se utiliza para obtener una vista de los valores del diccionario persona.

A continuación, realiza los siguientes ejercicios:

  1. Agregar estudiantes y sus calificaciones a un diccionario

    Crea un programa que permita agregar nombres de estudiantes como claves y sus calificaciones como valores en un diccionario. Luego, imprime el diccionario.

    Solución
    # Crear un diccionario vacío
    calificaciones = {}
    
    # Pedir el número de estudiantes
    num_estudiantes = int(input("¿Cuántos estudiantes quieres agregar?: "))
    
    # Agregar estudiantes y calificaciones al diccionario
    for i in range(num_estudiantes):
        nombre = input(f"Introduce el nombre del estudiante {i + 1}: ")
        calificacion = int(input(f"Introduce la calificación de {nombre}: "))
        calificaciones[nombre] = calificacion
    
    # Mostrar el diccionario con las calificaciones
    print("Diccionario de estudiantes y calificaciones:", calificaciones)
    

    Primero se crea un diccionario vacío. Luego se pide al usuario el número de estudiantes. En un bucle, se añaden los nombres y calificaciones al diccionario. Finalmente, se muestra el diccionario completo.

  2. Buscar un valor en un diccionario

    Escribe un programa que permita al usuario buscar una clave en un diccionario de frutas y colores.

    Solución
    # Definir un diccionario de frutas y colores
    frutas_colores = {
        "manzana": "rojo",
        "platano": "amarillo",
        "pera": "verde",
        "naranja": "naranja"
    }
    
    # Pedir al usuario una fruta
    fruta = input("Introduce el nombre de una fruta: ")
    
    # Verificar si la fruta está en el diccionario
    if fruta in frutas_colores:
        print(f"El color de la {fruta} es: {frutas_colores[fruta]}")
    else:
        print("Esa fruta no está en el diccionario.")
    

    Se comprueba si la clave introducida existe en el diccionario y se muestra su valor si está presente.

  3. Actualizar los precios de productos en un diccionario

    Escribe un programa que permita actualizar el precio de un producto en un diccionario. Si el producto no existe, se añade.

    Solución
    # Definir un diccionario de productos y precios
    productos = {
        "pan": 1.20,
        "leche": 0.99,
        "huevos": 2.50
    }
    
    # Pedir el producto y el nuevo precio
    producto = input("Introduce el nombre del producto: ")
    precio = float(input(f"Introduce el nuevo precio de {producto}: "))
    
    # Actualizar el precio o agregar el producto
    productos[producto] = precio
    
    # Mostrar el diccionario actualizado
    print("Diccionario de productos y precios actualizado:", productos)
    

    Se asigna un valor a una clave para actualizarla o crearla si no existe.

  4. Eliminar claves con valores negativos en un diccionario

    Escribe un programa que elimine las claves de un diccionario que tienen valores negativos.

    Solución
    # Definir un diccionario con números enteros
    numeros = {
        "a": 5,
        "b": -3,
        "c": 8,
        "d": -1
    }
    
    # Crear una lista de claves a eliminar
    claves_a_eliminar = [clave for clave, valor in numeros.items() if valor < 0]
    
    # Eliminar las claves con valores negativos
    for clave in claves_a_eliminar:
        del numeros[clave]
    
    # Mostrar el diccionario actualizado
    print("Diccionario sin valores negativos:", numeros)
    

    Primero se identifican las claves con valores negativos y después se eliminan.

  5. Contar la frecuencia de letras en una palabra

    Escribe un programa que cuente cuántas veces aparece cada letra en una palabra dada por el usuario.

    Solución
    # Pedir una palabra al usuario
    palabra = input("Introduce una palabra: ")
    
    # Crear un diccionario para la frecuencia de letras
    frecuencia_letras = {}
    
    # Contar la frecuencia de cada letra
    for letra in palabra:
        if letra in frecuencia_letras:
            frecuencia_letras[letra] += 1
        else:
            frecuencia_letras[letra] = 1
    
    # Mostrar el diccionario con la frecuencia
    print("Frecuencia de letras:", frecuencia_letras)
    

    Cada letra se usa como clave y su número de apariciones como valor.

  6. Intercambiar claves y valores de un diccionario

    Escribe un programa que intercambie las claves y los valores de un diccionario.

    Solución
    # Definir un diccionario
    diccionario = {
        "nombre": "Juan",
        "edad": 30,
        "ciudad": "Madrid"
    }
    
    # Intercambiar claves y valores
    diccionario_invertido = {valor: clave for clave, valor in diccionario.items()}
    
    # Mostrar el diccionario invertido
    print(f"Diccionario invertido: {diccionario_invertido}")
    

    Se utiliza una comprensión de diccionario junto con items() para invertir claves y valores.

  7. Crear un diccionario a partir de dos listas

    Escribe un programa que cree un diccionario usando una lista de claves y otra de valores.

    Solución
    # Definir listas
    claves = ["nombre", "edad", "ciudad"]
    valores = ["Ana", 28, "Barcelona"]
    
    # Crear el diccionario
    diccionario = {}
    
    for i in range(len(claves)):
        diccionario[claves[i]] = valores[i]
    
    # Mostrar el diccionario
    print(f"Diccionario creado: {diccionario}")
    

    Se recorren ambas listas usando índices para crear los pares clave-valor.

  8. Sumar los valores numéricos de un diccionario

    Escribe un programa que sume todos los valores numéricos de un diccionario.

    Solución
    # Definir un diccionario con valores numéricos
    diccionario = {
        "a": 5,
        "b": 12,
        "c": 3,
        "d": 7
    }
    
    # Inicializar la suma
    suma_total = 0
    
    # Sumar los valores
    for valor in diccionario.values():
        suma_total += valor
    
    # Mostrar el resultado
    print(f"La suma de los valores es: {suma_total}")
    

    Se recorren los valores del diccionario con values() y se van sumando.

  9. Encontrar la clave con el valor más alto

    Escribe un programa que encuentre la clave asociada al valor más alto en un diccionario.

    Solución
    # Definir un diccionario
    diccionario = {
        "a": 10,
        "b": 25,
        "c": 3,
        "d": 18
    }
    
    # Inicializar variables
    clave_mayor_valor = None
    mayor_valor = None
    
    # Buscar el mayor valor
    for clave, valor in diccionario.items():
        if mayor_valor is None or valor > mayor_valor:
            mayor_valor = valor
            clave_mayor_valor = clave
    
    # Mostrar el resultado
    print(f"La clave con el valor más alto es: {clave_mayor_valor}")
    

    Se compara cada valor para determinar el mayor.

  10. Combinar dos diccionarios

    Escribe un programa que combine dos diccionarios. Si una clave se repite, se sobrescribe.

    Solución
    # Definir diccionarios
    diccionario1 = {"a": 1, "b": 2, "c": 3}
    diccionario2 = {"b": 4, "d": 5}
    
    # Combinar diccionarios
    for clave, valor in diccionario2.items():
        diccionario1[clave] = valor
    
    # Mostrar el diccionario combinado
    print(f"Diccionario combinado: {diccionario1}")
    

    El segundo diccionario sobrescribe las claves repetidas.

🔨 AA4.17 Refuerzo Estructura de datos Listas y Diccionarios

(C.ESP1 / CE1.2 / IC1-3p)

  1. Escribe un programa que calcule la suma de todos los elementos de esta lista [4, 12, 15, 9, 31].

    Solución

  2. Escribe un programa que encuentre el mayor número de esta lista [4, 12, 65, 9, 31].

    Solución

  3. Escribe un programa que calcule cuántos elementos hay en esta lista [4, 12, 15, 9, 31].

    Solución

  4. Escribe un programa que muestre solo los número impares de esta lista [4, 12, 15, 9, 31].

    Solución

  5. Escribe un programa que muestre esta lista invertida [4, 12, 15, 9, 31].

    Solución

  6. Escribe un programa que cree un diccionario con el nombre, la edad y la ciudad de una persona, obteniendo estos datos del usuario por teclado, y luego muestre el diccionario..

    Solución

  7. Amplía el ejercicio anterior para que se le pida al usuario una nueva edad, modifique la edad que tenía la persona y muestre nuevamente el diccionario actualizado.

    Solución

  8. Amplía el ejercicio anterior para que añada al diccionario de la persona su dirección de correo electrónico, y muestre el diccionario actualizado.

    Solución

  9. Amplía el ejercicio anterior para que se le pida al usuario una clave y elimine ese par clave-valor del diccionario persona. Muestra el diccionario actualizado.

    Solución

  10. Amplía el ejercicio anterior para mostrar en pantalla sólo los valores del diccionario.

    Solución