IndexError:列表索引超出范围:更改代码格式时



原代码为:

def lucky_candies(a, k):
l = [0] + (k-1) * [float('-inf')]
for x in a:
l = [max(l[(i-x) % k] + x, y) for i, y in enumerate(l)]
return print(l[0])
lucky_candies([5000000,4000000,3000000,2000000,1000000], 9)

我试着把它改成我能读懂的东西:

def lucky_candies(a, k):
l = [0] + (k-1) * [float('-inf')]
for x in a:
for i, y in enumerate(l):
l = [max(l[(i-x) % k] + x, y)]
return print(l[0])
lucky_candies([5000000,4000000,3000000,2000000,1000000], 9)

但是返回:

IndexError: list index out of range

a的每次迭代创建一个新的列表(称为result)来保存新的l。顺便问一句,使用return print(l[0])的原因是什么?你可以直接return

尝试以下操作:

def lucky_candies(a, k):
l = [0] + (k-1) * [float('-inf')]
for x in a:
result = list()
for i, y in enumerate(l):
result.append(max(l[(i-x) % k] + x, y))
l = result
return l[0]
>>> lucky_candies([5000000,4000000,3000000,2000000,1000000], 9)
9000000

旧代码给出长度为k的列表l,而新代码立即使单元素列表l,因此处理索引>0变得非法

max(l[(i-x) % k] + x, y)添加到新列表