Является динамическим решением для проблемы kp. У меня проблема с типом, когда для генератора для сжатия. Это, безусловно, список, но он говорит, что это целое число, я везде искал, но не могу найти решение. Могу ли я помочь?Python: List is int, TypeError
import itertools
def kpdynamic1(max_weight, iterable):
'''
Dynamic solution kp
:param max_weight: int
'''
K = [(0, [(0, 0)])]
# debug
print type(iterable)
print iterable
for w in range(1, max_weight + 1):
l = [(0, [(0, 0)])] + \
[(K[w - weight][0] + value, K[w - weight][1] + [(value, weight)])
for (value, weight) in
itertools.compress(iterable,
(1 if (weight <= w) else 0
for (value, weight) in iterable))]
K += max(l, key=lambda x: x[0])
return K[max_weight]
if __name__ == '__main__':
max_size = 30
values = (3, 1.9, 30)
sizes = (3, 2, 14)
iterable = zip(values, sizes)
out = kpdynamic1(max_size, iterable)
OUT:
Traceback (most recent call last):
..., line ..
out = kpdynamic1(max_size, iterable)
..., line ..
for (value, weight) in iterable))]
TypeError: 'int' object has no attribute '__getitem__'
<type 'list'>
[(3, 3), (1.9, 2), (30, 14)]