Вот решение:
heights = [67, 67, 55, 65, 55, 61, 61, 58, 40, 65]
box_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def find_pairs(val):
i = 0
while i < len(data):
val1 = data[i]['height']
val2 = val-val1
el2 = [x for x in data if val2 == x['height'] and x != data[i]]
if el2:
print(val1, data[i]['box'])
print(val2, el2[0]['box'])
data.remove(data[i])
data.remove(el2[0])
print('Total {} cm\n'.format(val1 + val2))
i += 1
data = []
for h, b in zip(heights, box_numbers):
data.append({'height': h, 'box': b})
for desired_sum in range(120, 0, -1):
find_pairs(desired_sum)
for d in data:
print(d['height'], d['box'])
print('Total {} cm\n'.format(d['height']))
Вывод:
55 3
65 4
Total 120 cm
65 10
55 5
Total 120 cm
61 6
58 8
Total 119 cm
67 1
40 9
Total 107 cm
67 2
Total 67 cm
61 7
Total 61 cm