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.
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)$).
# 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.
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.
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.
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.
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.
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.
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.
# 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.
# Usamos dictionary comprehension
return {v: k for k, v in dic.items()}
No hay comentarios:
Publicar un comentario