为何触发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
相关产品推荐
相关产品推荐

