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

为何触发list index out of range错误?sum13函数报错咨询

解决"list index out of range"错误的分析与修复

我来帮你拆解下这个问题的根源,以及怎么修复它。

首先,你遇到的list index out of range错误,确实是由最后一行的if nums[0] != 13:引发的——当传入的nums是空列表时,比如调用sum13([]),此时nums里没有任何元素,自然不存在索引0,直接访问nums[0]就会触发索引越界错误。

咱们来看下你原代码的逻辑:你想计算列表中所有不等于13,且不在13后面的元素的总和。但你忽略了空列表这个边界情况,而且代码的执行顺序也有点小问题(先循环再处理第一个元素,空列表时循环跳过,但还是会执行最后一行的索引访问)。

修复方案1:先处理空列表,调整执行顺序

把空列表的判断放在最前面,再处理第一个元素,这样就能避免索引越界:

def sum13(nums):
    summ = 0
    # 先处理空列表的情况,直接返回0
    if not nums:
        return summ
    # 第一个元素不是13的话,加到总和里
    if nums[0] != 13:
        summ += nums[0]
    # 从第二个元素开始遍历
    for i in range(1, len(nums)):
        # 当前元素不是13,且前一个元素也不是13时才累加
        if nums[i] != 13 and nums[i-1] != 13:
            summ += nums[i]
    return summ

修复方案2:更简洁的遍历方式(推荐)

换一种思路,遍历每个元素时记录前一个元素是否是13,这样代码更易读,也能自动处理空列表:

def sum13(nums):
    total = 0
    prev_was_13 = False
    for num in nums:
        if num == 13:
            # 当前是13,标记下一个元素要跳过,直接进入下一轮循环
            prev_was_13 = True
            continue
        if prev_was_13:
            # 前一个是13,跳过当前元素,重置标记
            prev_was_13 = False
            continue
        # 符合条件的元素,累加到总和
        total += num
    return total

这样不管传入空列表、只有一个元素的列表,还是包含多个13的列表,都能正确计算结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:12:49