Следующая проблема часто называется несколькими именами и имеет много литературы. К сожалению, я немного новичок в Python и могу немного помочь с применением решения в моем случае.
У меня есть pandas фрейм данных, содержащий ~ 40000 строк, поэтому оптимизация, вероятно, является фактором. Фрейм данных содержит несколько столбцов объектных кодов и результирующий столбец сумм в долларах. Я хотел бы доказать, что определенное подмножество этих долларовых сумм составляет определенную стоимость. Другими словами, я хотел бы доказать следующее:
IN:
Target: $11.72
Code1 Code2 Code3 Amount
RG22 331 ZAV $2.00
XG11 542 TAM $4.23
RG22 117 GEE $6.81
RG76 956 ZXA $2.91
ZZ99 223 TTQ $11.99
BW32 454 PBC $9.35
OUT:
Code1 Code2 Code3 Amount
RG22 331 ZAV $2.00
RG22 117 GEE $6.81
RG76 956 ZXA $2.91
Большинство решений (включая это отличное решение , код ниже) только принимают и возвращают списки значений. Мне нужно решение, которое бы также воспроизводило объектные коды. Пожалуйста, сообщите, и спасибо!
def subset_sum(numbers, target, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s == target:
print "sum(%s)=%s" % (partial, target)
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum(remaining, target, partial + [n])
if __name__ == "__main__":
subset_sum([3,9,8,4,5,7,10],15)
#Outputs:
#sum([3, 8, 4])=15
#sum([3, 5, 7])=15
#sum([8, 7])=15
#sum([5, 10])=15