IndexError: list index out of range: When changing code format

IndexError: list index out of range: When changing code format

原代码为:

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)

但是这个returns:

IndexError: list index out of range

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

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

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