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 <pych...@gmail.com> escribió: > El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez < > stvz...@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@python.org > https://mail.python.org/mailman/listinfo/python-es > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es