sábado, 7 de marzo de 2026

10 Ejercicios de Python Resueltos: Diccionarios, Sets y Tuplas en la Universidad

Continuamos con nuestra megaguía de Python en larebelion.com. Una vez que dominas los bucles y las listas, los profesores de la universidad suben el nivel exigiendo eficiencia. Y ahí es donde entran los diccionarios (Tablas Hash) y los conjuntos (Sets).

Aquí tienes 10 ejercicios reales de universidades españolas (UCM, UAB, UNED...) centrados puramente en estructuras de datos complejas.




11. Frecuencia de Caracteres (UCM - Universidad Complutense)

Enunciado: Escribe una función que reciba una cadena de texto y devuelva un diccionario con la cantidad de veces que aparece cada carácter.

def contar_caracteres(cadena):
    frecuencias = {}
    for char in cadena:
        frecuencias[char] = frecuencias.get(char, 0) + 1
    return frecuencias

12. Elementos Comunes con Sets (UAB - Universitat Autònoma de Barcelona)

Enunciado: Dadas dos listas, devuelve una nueva lista con los elementos comunes sin usar bucles anidados (complejidad $O(n)$).

def elementos_comunes(lista1, lista2):
    # Convertimos a sets y usamos la intersección &
    return list(set(lista1) & set(lista2))

13. Agrupar Palabras por Longitud (UPNA - U. Pública de Navarra)

Enunciado: Dada una lista de palabras, devuelve un diccionario donde las claves sean las longitudes de las palabras y los valores listas de palabras con esa longitud.

def agrupar_longitud(palabras):
    grupos = {}
    for p in palabras:
        longitud = len(p)
        if longitud not in grupos:
            grupos[longitud] = []
        grupos[longitud].append(p)
    return grupos

14. Combinar y Sumar Diccionarios (UNED)

Enunciado: Dados dos diccionarios con claves de texto y valores numéricos, devuelve un diccionario combinado. Si una clave existe en ambos, sus valores deben sumarse.

def combinar_diccionarios(d1, d2):
    resultado = d1.copy()
    for k, v in d2.items():
        resultado[k] = resultado.get(k, 0) + v
    return resultado

15. Eliminar Duplicados Manteniendo Orden (USC - U. de Santiago)

Enunciado: Elimina los duplicados de una lista, pero a diferencia de usar set() directamente, mantén el orden original de los elementos.

def unicos_con_orden(lista):
    vistos = set()
    resultado = []
    for item in lista:
        if item not in vistos:
            vistos.add(item)
            resultado.append(item)
    return resultado

16. Diccionario de Diccionarios: Notas de Alumnos (UCA - U. de Cádiz)

Enunciado: Recibe un diccionario donde las claves son alumnos y los valores diccionarios con asignaturas y notas. Calcula la media de cada alumno.

def calcular_medias(registro):
    medias = {}
    for alumno, notas in registro.items():
        if notas:
            medias[alumno] = sum(notas.values()) / len(notas)
        else:
            medias[alumno] = 0.0
    return medias

17. Subconjuntos Estrictos (ULL - U. de La Laguna)

Enunciado: Escribe una función que verifique si la lista A es un subconjunto de la lista B, asumiendo que todos los elementos son únicos.

def es_subconjunto(lista_a, lista_b):
    return set(lista_a).issubset(set(lista_b))

18. Tuplas: Min y Max en una pasada (UNIZAR - U. de Zaragoza)

Enunciado: Encuentra el valor máximo y mínimo de una lista en un solo bucle y devuélvelos empaquetados en una tupla.

def min_max(numeros):
    if not numeros: return None
    minimo = maximo = numeros[0]
    for n in numeros[1:]:
        if n < minimo: minimo = n
        if n > maximo: maximo = n
    return (minimo, maximo)

19. Crear Diccionario desde Dos Listas usando Zip (UCLM)

Enunciado: Dadas dos listas, una de claves y otra de valores, conviértelas en un diccionario. Asegúrate de manejar el caso donde las listas tienen diferentes tamaños.

def fusionar_listas(claves, valores):
    # Zip trunca a la lista más corta automáticamente
    return dict(zip(claves, valores))

20. Invertir Diccionario (URV - Universitat Rovira i Virgili)

Enunciado: Dado un diccionario, devuelve uno nuevo donde las claves sean los valores antiguos, y los valores sean las claves antiguas. Supón que los valores originales son únicos.

def invertir_diccionario(dic):
    # Usamos dictionary comprehension
    return {v: k for k, v in dic.items()}

No hay comentarios:

Publicar un comentario