Python:List是一个int类型的错误
是kp问题的动态解决方案。我对压缩发生器的类型有问题。这显然是一个列表,但上面说的是一个整数,我到处都找了,但找不到解决方案。我能帮忙吗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
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)])