То, что вам нужно, это комбинации, а не перестановки (перестановки данной комбинации дадут тот же общий вес)
Чтобы вычислить итоговые значения веса, будет легче создать словарь с вашимстроки в качестве ключа и соответствующие веса в качестве значения.
Тогда комбинация с общей структурой веса может быть легко построена с использованием словарного понимания.
Вот как вы можете это сделать:
from itertools import *
items = [["1", 2, 10], ["2", 2, 6], ["3", 4, 11], ["4", 2, 4], ["5", 3, 5]]
values = [item[0] for item in items]
weights = {item[0]:item[1] for item in items}
combos = []
for size in range(len(values)): combos += combinations(values,size+1)
comboWeights = { combo:sum([weights[value] for value in combo]) for combo in combos }
Результирующий словарь comboWeights имеет комбинации кортежей в качестве ключей и общие веса в качестве значений:
for combo,weight in comboWeights.items(): print(combo,weight)
('1',) 2
('2',) 2
('3',) 4
('4',) 2
('5',) 3
('1', '2') 4
('1', '3') 6
('1', '4') 4
('1', '5') 5
('2', '3') 6
('2', '4') 4
('2', '5') 5
('3', '4') 6
('3', '5') 7
('4', '5') 5
('1', '2', '3') 8
('1', '2', '4') 6
('1', '2', '5') 7
('1', '3', '4') 8
('1', '3', '5') 9
('1', '4', '5') 7
('2', '3', '4') 8
('2', '3', '5') 9
('2', '4', '5') 7
('3', '4', '5') 9
('1', '2', '3', '4') 10
('1', '2', '3', '5') 11
('1', '2', '4', '5') 9
('1', '3', '4', '5') 11
('2', '3', '4', '5') 11
('1', '2', '3', '4', '5') 13