You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环报错IndexError:列表索引越界问题求助

解决列表累加的索引越界问题 & 正确实现需求

嘿,我来帮你捋清楚这个问题。你写的代码现在有两个核心问题:

1. 累加逻辑不符合需求

你当前代码里的accumulative_weights = weights[k] + weights[k+1]是把相邻两个元素直接赋值给累加和,这完全不是从左到右逐个累加的逻辑——比如第一次循环会把4+7=11赋值给累加和,第二次又变成7+3=10,这和你要的“逐步累加元素”完全不符。

2. 索引越界的根本原因

你的while循环只判断了accumulative_weights <= THRESHOLD,完全没限制k的取值范围。当k增长到等于列表长度时,weights[k]会直接超出索引范围;甚至更早的时候,当k是列表最后一个元素的索引时(比如这里列表长度是7,索引到6),weights[k+1]也就是weights[7]就已经不存在了,直接触发IndexError。


正确的实现方案

我们需要逐个累加元素,每次先判断加上当前元素后是否超过阈值,同时确保不会遍历到列表之外。这里给你两种常用写法:

写法一:用for循环(更直观)

THRESHOLD = 30
weights = [4, 7, 3, 5, 6, 2, 3]
accumulative_weights = 0
k = 0

for weight in weights:
    # 先预判加当前元素会不会超阈值
    if accumulative_weights + weight <= THRESHOLD:
        accumulative_weights += weight
        k += 1
    else:
        # 超了就停止,不用继续遍历了
        break

print(f"最大可累加元素个数k是:{k}")

写法二:用while循环(严格控制索引)

如果你更倾向于用while循环,一定要同时限制索引范围和累加条件:

THRESHOLD = 30
weights = [4, 7, 3, 5, 6, 2, 3]
accumulative_weights = 0
k = 0

# 两个条件必须同时满足:k没到列表末尾,且加当前元素后不超阈值
while k < len(weights) and accumulative_weights + weights[k] <= THRESHOLD:
    accumulative_weights += weights[k]
    k += 1

print(f"最大可累加元素个数k是:{k}")

验证结果

运行上面的代码,累加过程是:4→11→14→19→25→27→30,刚好把7个元素都加完,和等于阈值30,所以k的结果是7,完全符合需求,也不会出现索引越界的问题。

内容的提问来源于stack exchange,提问作者Aircoll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:02:25