[Python-es] Obtención de Sumandos para un Target a partir de una colección de valores

Manuel A. Estevez Fernandez stvzito en gmail.com
Vie Feb 9 17:30:47 EST 2018


Gracias por la respuesta, al principio intenté algo así, sin embargo con
listas de 1000 / 2000 valores se vuelve muy pesado.



Manuel Alejandro Estévez Fernández



El 9 de febrero de 2018, 7:08, Chema Cortes <pych3m4 en gmail.com> escribió:

> El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez <
> stvzito en gmail.com> escribió:
>
>> Hola gracias por tu sugerencia.
>>
>> Lo que necesito es por ejemplo:
>>
>> para el ID 1 el target es 100,
>>
>> entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ?
>> 20, 30, 50, 15, 45, 60
>> 20 + 30 + 50 = 100
>>
>
> Sin conocer la naturaleza de los datos, para una primera aproximación se
> podrían obtener todas las combinaciones posibles de los valores y comprobar
> si alguna suma el valor objetivo:
>
> from itertools import combinations
>
> combs = (lst for n in range(1, len(valores))
>               for lst in combinations(valores, n)
>               if sum(lst)==target)
>
> res = next(combs, None)
>
> Obtienes la primera combinación que sume el valor objetivo, o None si no
> encuentra ninguna combinación. Se puede pensar alguna optimización más del
> algoritmo según si los datos están ordenados o si supieras en qué rango se
> mueven.
>
> En cuanto a usar procesos, es fácil particionar el problema agrupando los
> datos por ID (ya lo tienes hecho para generar el diccionario). El módulo
> multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para
> ponerte un ejemplo).
>
>
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
> Buscador Python Hispano: http://ch3m4.org/python-es
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20180209/3f75d4ca/attachment.html>


Más información sobre la lista de distribución Python-es