Python改写列表推导式后触发IndexError: list index out of range报错求解
报错产生原因
原始代码的列表推导式是基于修改前的完整旧l列表,一次性计算出全部k个新元素组成新列表,最后才整体替换l的值,计算所有新元素时,用到的都是旧l的原始取值,不会中途修改l的结构。
你的改写版本存在两个核心错误:
- 遍历原l的过程中,每计算1个元素就直接把l覆盖为仅包含当前1个元素的列表,直接破坏了l原本长度为k的结构
- 后续循环计算其他元素时,用到的已经是被截断、长度仅为1的l,当
(i-x) % k计算得到的索引大于0时,就会触发列表索引越界的报错。
修复方案
你需要先创建一个临时列表存储所有新计算的元素,等全部元素计算完成后再替换原l变量,不能中途修改用于计算的原始l列表。修复后的代码如下:
def lucky_candies(a, k): l = [0] + (k-1) * [float('-inf')] for x in a: new_l = [] for i, y in enumerate(l): new_l.append(max(l[(i-x) % k] + x, y)) l = new_l return print(l[0]) lucky_candies([5000000,4000000,3000000,2000000,1000000], 9)
运行后可得到正确结果9000000。
内容的提问来源于stack exchange,提问作者NewCoder
相关产品推荐
相关产品推荐

