[Python-es] Obtención de Sumandos para un Target a partir de una colección de valores
Felix Perez
felix.listadebian en gmail.com
Vie Feb 9 21:37:27 EST 2018
El 9 de febrero de 2018, 19:30, Manuel A. Estevez Fernandez
<stvzito en gmail.com> escribió:
> 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
>>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
--
usuario linux #274354
normas de la lista: http://wiki.debian.org/es/NormasLista
como hacer preguntas inteligentes:
http://www.sindominio.net/ayuda/preguntas-inteligentes.html
Más información sobre la lista de distribución Python-es