IIC2233 / Syllabus

146 stars 13 forks source link

Relaciones entre 2 generadores y entre 2 elementos de un mismo generador #464

Open MTGG123 opened 3 weeks ago

MTGG123 commented 3 weeks ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Mientras hacia la tarea 3 me surgió la duda de como relacionar el contenido entre 2 generadores. Por ejemplo, en un intento de buscar pedidos que contengan cierta pizza, trate de hacer un product y luego un filter de manera que me devuelva solo tuplas donde haya un pedido con cierto tipo de pizza y una pizza de ese tipo, pero claramente el código no funciono debido a la longitud del generador que me devolvió el product. Buscando entre los contenidos de la semana 8 no encontré nada que relacionara 2 generadores (aparte del product). Otro problema similar me pasa cuando trato de relacionar 2 o mas elementos de un generador (por ejemplo, buscar pizzas con el mismo nombre y distinto tamaño en un generador de pizzas)

Gcamposbriceno commented 2 weeks ago

Hola!

Algo que debes tener en cuenta al usar product es que esto junta todas las tuplas de un generador con todas las tuplas del otro. Esto probablemente no es lo que quieres, sino que, al juntar pizzas con pedidos, sería mejor filtrar primero las tuplas donde tanto el pedido como la pizza tienen el mismo nombre, para luego hacer las demás operaciones que se piden.

MTGG123 commented 2 weeks ago

Hola!

Algo que debes tener en cuenta al usar product es que esto junta todas las tuplas de un generador con todas las tuplas del otro. Esto probablemente no es lo que quieres, sino que, al juntar pizzas con pedidos, sería mejor filtrar primero las tuplas donde tanto el pedido como la pizza tienen el mismo nombre, para luego hacer las demás operaciones que se piden.

Claro, pero mi problema es que cuando hago un product, el resultado es tan grande que no alcanza a pasar por el filter antes de que pase el tiempo maximo, entonces tampoco funcionaria filtrarlo

Gcamposbriceno commented 2 weeks ago

Intenta filtrar los generadores antes de hacer el product. Esto reduce significativamente la cantidad de tuplas totales que se formarán.

gracie-14 commented 2 weeks ago

Hola! Espero que esté bien que pregunte esto por aquí, es que yo tengo una pregunta muy parecida, también me ha dificultado relacionar 2 generadores.

Con los dos generadores, alcanzo un momento donde tengo tuplas, filtradas según las condiciones, con las cosas correspondientes (por ejemplo, el Contenido Pedido con la Pizza del mismo nombre, o el Contenido Pedido con el Pedido del mismo id_pedido) -- pero no puedo averiguar como sumar partes de sus contenidos según esos grupos sin pasar el tiempo máximo, porque de alguna forma hay que saber lo que viene antes y después. Para ganancias_producidas_en_los_pedidos por ejemplo, hay que sumar el precio de todos los pedidos con el mismo id_pedido, para varios ids distintos... pero un generador solo puede acceder a uno a la vez. Por eso tuve que crear un variable para guardarlo y usar un for loop, pero con la carpeta "l" toma demasiado tiempo. ¿Como se puede hacer esto de manera eficiente, sin usar un for loop?

Gcamposbriceno commented 2 weeks ago

Hola!!

Te recomiendo que investigues el comando reduce!

gracie-14 commented 2 weeks ago

Yo lo intenté con reduce, todavía pasa el tiempo máximo. Lo que me complica es que puesto que hay varios id_pedidos, hay que hacer un reduce diferente para cada uno, porque reduce solo da un output pero necesitamos varios, ¿no? Y por eso no puedo pensar en otra opción que for, para recorrer los varios grupos de id_pedido. Aunque paso al for un generador, sigue tomando demasiado tiempo.

Gcamposbriceno commented 2 weeks ago

Para solucionar tu problema, puedes generar un output que involucre a todos los valores de id_pedidos, como un diccionario que cuente cuantas veces se repite cada uno. Como un comentario general, la idea de programacion funcional es que logren hacer estas funciones de manera eficiente, evitando lo mas posible recorrer multiples veces el mismo iterable.