Python:List是一个int类型的错误

Python:List是一个int类型的错误,python,typeerror,python-2.x,Python,Typeerror,Python 2.x,是kp问题的动态解决方案。我对压缩发生器的类型有问题。这显然是一个列表,但上面说的是一个整数,我到处都找了,但找不到解决方案。我能帮忙吗 import itertools def kpdynamic1(max_weight, iterable): ''' Dynamic solution kp :param max_weight: int ''' K = [(0, [(0, 0)])] # debug print type(ite

是kp问题的动态解决方案。我对压缩发生器的类型有问题。这显然是一个列表,但上面说的是一个整数,我到处都找了,但找不到解决方案。我能帮忙吗

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)
导入itertools
def kpdynamic1(最大重量,可承受):
'''
动态解kp
:参数最大重量:int
'''  
K=[(0,[(0,0)])]
#调试
打印类型(可编辑)
可打印
对于范围内的w(1,最大重量+1):
l=[(0,[(0,0)])]+\
[(K[w-重量][0]+数值,K[w-重量][1]+[(数值,重量)])
对于(值、重量)英寸
itertools.压缩(iterable,

(1)如果(重量您使用
l
中的单个元素扩展
K

K += max(l, key=lambda x: x[0])
其中,
l
包含元组。请注意,我说的是扩展,而不是附加;添加了一个最大元组中包含的元素,而不是元组本身:

>>> K = []
>>> K += (0, 0)
>>> K
[0, 0]
因此,在
K
中以单个整数结束,然后尝试将其作为序列处理:

[(K[w - weight][0] + value, K[w - weight][1] + [(value, weight)])
这里
K[…]
返回一个整数,因此
K[…][0]
将失败

使用
K.append()
,而不是使用
+=
扩展:

或者将
max()
的结果包装在单个元素列表中:

K += [max(l, key=lambda x: x[0])]
通过该更改,您的函数将生成一个结果:

>>> import itertools
>>> def kpdynamic1(max_weight, iterable):
...     K = [(0, [(0, 0)])]
...     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.append(max(l, key=lambda x: x[0]))
...     return K[max_weight]
... 
>>> max_size = 30
>>> values = (3, 1.9, 30)
>>> sizes = (3, 2, 14)
>>> iterable = zip(values, sizes)
>>> kpdynamic1(max_size, iterable)
(61.9, [(0, 0), (30, 14), (30, 14), (1.9, 2)])
导入itertools >>>def kpdynamic1(最大重量,可承受): …K=[(0,[(0,0)])] …对于范围内的w(1,最大重量+1): …l=[(0,[(0,0)])]+\ …[(K[w-重量][0]+数值,K[w-重量][1]+[(数值,重量)]) …用于(值、重量)英寸 …itertools.压缩(iterable, …(1如果(重量>>最大尺寸=30 >>>数值=(3,1.9,30) >>>尺寸=(3、2、14) >>>iterable=zip(值、大小) >>>kpdynamic1(最大尺寸,可调节) (61.9, [(0, 0), (30, 14), (30, 14), (1.9, 2)])
K += [max(l, key=lambda x: x[0])]
>>> import itertools
>>> def kpdynamic1(max_weight, iterable):
...     K = [(0, [(0, 0)])]
...     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.append(max(l, key=lambda x: x[0]))
...     return K[max_weight]
... 
>>> max_size = 30
>>> values = (3, 1.9, 30)
>>> sizes = (3, 2, 14)
>>> iterable = zip(values, sizes)
>>> kpdynamic1(max_size, iterable)
(61.9, [(0, 0), (30, 14), (30, 14), (1.9, 2)])