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
相关产品推荐
相关产品推荐

