Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
INTRODUCCIÓN A LA PROGRAMACIÓN · ESCUELA DE NEGOCIOS, UTDT · PRIMER SEMESTRE 2021 Guía de Ejercicios 9: Listas por comprensión Objetivos: Presentar una forma alternativa y muy conveniente para trabajar con listas conocida como listas por comprensión (list comprehension), azúcar sintáctica ofrecida en algunos lenguajes como Python, Haskell, Javascript o Scala. Conocer e incorporar el uso de las funciones sobre listas max, min, sum, any, all, así como las expresiones condicionales (EXPRESIÓN1 if CONDICIÓN else EXPRESIÓN2). Ejercicio 1. Determinar a manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa manoa mano el valor de estas expresiones, donde txt:str = 'este es un texto muy corto de prueba'. Luego revisar las respuestas en una consola ipython. (a) [x for x in range(10) if x %3==1] (b) [(x if x %2==0 else -111) for x in range(10)] (c) [x for x in txt.split(' ') if len(x)>3] (d) ' '.join([x+' '+x for x in txt.split()]) (e) ''.join([x for x in txt if x not in 'aeiou']) Ejercicio 2. Escribir expresiones con listas por comprensión que devuelvan estos valores, tomando nuevamente como punto de partida range(10) o bien el string txt definido en el Ejercicio 1. (a) [10, 50, 90] (b) ['par', 'non', 'par', 'non', 'par', 'non', 'par', 'non', 'par', 'non'] (c) '_st_ _s _n t_xt_ m_y c_rt_ d_ pr__b_' (d) 'EstE Es Un tExtO mUy cOrtO dE prUEbA' (e) [4, 2, 2, 5, 3, 5, 2, 6] Ejercicio 3. Especificar, programar y verificar con testing funciones para resolver los siguientes problemas. Usar listas por comprensión; no escribir ciclos explícitamente con for o while. (a) Dada una lista de strings, contar la cantidad total de caracteres. Por ejemplo, para ['tor', 'c','ua','to'] el resultado esperado es 8 (Ejercicio 3(f) de la Guía 4). (b) Dada una lista de strings, contar la cantidad de veces que aparece la letra 'a'. Por ejemplo, para ['abba','acdc','bee gees','a-ha'] el resultado esperado es 5 (Ejercicio 3(g) de la Guía 4). (c) Dada una lista no vacía de strings, devolver el conjunto formado por los strings más largos de dicha lista. Por ejemplo, para ['a','abc','','xyz','mn','abc'] el resultado esperado es {'abc','xyz'} (d) Devolver el conjunto de claves que tienen máximo valor en un Dict[str,int]. Por ejemplo, para {'a':10, 'b':14, 'c':9, 'd':14, 'e':7} debe devolver {'b', 'd'} (Ejercicio 12 de la Guía 7). 1 (e) Dada una lista de listas de float, computar el promedio de todas las listas no vacías y de- volver el máximo de dichos promedios. Como precondición, la lista debe contener al menos una lista no vacía. Por ejemplo, para [[1.0, 2.0, 3.0], [5.0, 6.0], [], [4.0, 4.0, 4.0]], debe devolver 5.5. Ejercicio 4. Convertir a ciclos las listas por comprensión usadas en el Ejercicio 3 y estimar su complejidad algorítmica en el peor caso. Ejercicio 5. En el Ejercicio 6 de la Guía 8 se construyó una lista de objetos del tipo Provincia. Escribir listas por comprensión para: (a) Calcular la población total de Argentina. (b) Definir las funciones formatear y criterio para que la siguiente expresión devuelva el listado de provincias que tienen al menos dos millones de habitantes, presentado de esta manera: Buenos Aires (15M), CABA (2M), ... print(', '.join([ formatear(p) for p in provincias if criterio(p)])) Ejercicio 6. La función uniform(a:float, b:float) del módulo random devuelve un float pseudo-aleatorio entre a y b. Considerar la siguiente función estimar_algo, que supone que el archivo punto.py contiene la clase Punto definida en el Ejercicio 1 de la Guía 8. 1 from punto import Punto 2 from random import uniform 3 4 def estimar_algo(n:int) -> float: 5 ''' ** COMPLETAR ** ''' 6 puntos:List[Punto] = [Punto(uniform (-1.0, 1.0), uniform (-1.0, 1.0)) 7 for i in range(n)] 8 origen:Punto = Punto (0.0, 0.0) 9 en_circulo:List[Punto] = [ ** COMPLETAR ** ] 10 est:float = (len(en_circulo) / len(puntos)) * 4.0 11 return est (a) ¿En qué consiste la lista de puntos construida en las líneas 6 y 7? (b) Completar la línea 9, de modo que en la lista en_circulo queden solamente los puntos que están a distancia al origen menor o igual a 1. (c) ¿Qué es lo que estima esta función? Ejecutarla con valores crecientes de n: 1000, 10000, etc. Esta técnica se conoce con el nombre de método de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlométodo de Monte Carlo, y es muy usada para aproximar expresiones matemáticas. 2 https://es.wikipedia.org/wiki/M%C3%A9todo_de_Montecarlo
Compartir