Это действительно продолжение из question, который я задал в начале этого года. Я получил большой ответ на следующую проблему:Найти значения в списке, которые представляют собой сумму - оптимизацию
Я пытаюсь кодировать что-то простое и вещее, чтобы определить комбинации значений из списка, сумма которых равна определенное значение, в пределах некоторого допуска.
Например:
если А = [0.4,2,3,1.4,2.6,6.3] и целевое значение равно 5 +/- 0,5, то выход я хочу есть (2,3) , (1,4,2,6), (2,2,6), (0,4,2,3), (0,4,3,1,4) и т. Д., Если комбинаций не найдено, функция должна возвращать 0 или , или что-то подобное.
Я внедрил предложение в свой код. Тем не менее, метод (см. Ниже) быстро стал этапом ограничения производительности в моем коде. Это довольно быстро запускать каждую итерацию, но ее запускают много, много раз.
Поэтому я обращаюсь к сообществу (которые намного ярче, чем я) за вашу помощь. Можете ли вы в любом случае оптимизировать эту функцию или заменить ее чем-то намного быстрее?
def findSum(self, dataArray, target, tolerance=0.5):
for i in xrange(1, len(dataArray)+1):
results = [list(comb) for comb in list(itertools.combinations(dataArray, i))
if target-tolerance < sum(map(float, comb)) < target+tolerance]
if len(results) != 0:
return results
[Codereview] (https://codereview.stackexchange.com) будет лучшим местом – sam