Python列表负数求和遇IndexError:列表索引越界问题求助
解决列表负数求和的IndexError问题
嘿,我来帮你搞定这个索引越界的bug!咱们先拆解一下问题出在哪:
你的列表my_list一共有10个元素,Python里列表的索引是从0开始计数的,所以合法的索引范围是0到9(也就是len(my_list)-1)。但你的代码里有两个关键问题:
- 初始i是0,第一次循环就执行
i +=1变成1,当i增加到10的时候,你还在尝试访问my_list[10]——这显然超出了列表的最大索引,直接触发IndexError。 - 你把
i <= len(my_list)放在了元素判断之后,这意味着在检查索引是否合法之前,你已经先去访问列表元素了,这个条件完全起不到防护作用。
修复方案1:修正你的while循环逻辑
我们调整循环条件和执行顺序,确保只在合法索引范围内访问元素:
my_list = [7, 5, 4, 4, 3, 1, -2, -3, -5, -7] mynb = 0 i = 0 # 用i < len(my_list)作为循环终止条件,确保索引不会越界 while i < len(my_list): if my_list[i] <= 0: mynb += my_list[i] print(mynb) # 每次循环最后再递增索引,避免一开始就跳过第一个元素 i += 1
修复方案2:更Pythonic的写法(推荐)
手动管理索引很容易出错,Python里直接遍历列表元素会更简洁安全:
my_list = [7, 5, 4, 4, 3, 1, -2, -3, -5, -7] mynb = 0 for num in my_list: if num <= 0: mynb += num print(mynb)
进阶方案:如果不需要实时打印累加值
可以用生成器表达式一步完成求和,代码更紧凑:
my_list = [7, 5, 4, 4, 3, 1, -2, -3, -5, -7] mynb = sum(num for num in my_list if num <= 0) print(mynb)
内容的提问来源于stack exchange,提问作者Jason Anderson
相关产品推荐
相关产品推荐

