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

求助:如何解决Python代码中的List index out of range问题?

解决列表索引越界问题及罗马数字转换逻辑修正

你的代码出现List index out of range的原因是变量j在循环中没有更新,导致while循环的条件一直成立,i不断递增直到超出arr的索引范围。同时代码还存在罗马数字转换逻辑的漏洞,最后一个元素没有被计入结果。

问题分析

  • 索引越界根源:j初始设为i+1,但后续循环中只递增i,j始终保持初始值。比如处理'VIII'时,arr长度为4,j一直是1,while j < 4永远成立,i会一直增加到4,此时arr[i]访问arr[4]就会越界(数组索引最大为3)。
  • 逻辑漏洞:当前代码只处理了前n-1个元素的比较,最后一个元素没有被加入结果中。

修正后的代码

list1 = {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000
}

def func(x):
    arr = []
    res = 0
    # 将罗马字符转换为对应数值
    for z in x:
        arr.append(list1[z])
    
    # 遍历到倒数第二个元素,避免j越界
    for i in range(len(arr) - 1):
        j = i + 1
        if arr[i] >= arr[j]:
            res += arr[i]
        else:
            res -= arr[i]
    # 加上最后一个元素
    res += arr[-1]
    return res

print(func('VIII'))  # 输出8
print(func('IX'))    # 输出9,验证减法逻辑

关键修正点

  • 改用for循环遍历到len(arr)-1,确保j=i+1不会超出数组范围。
  • 循环结束后加上最后一个元素,因为最后一个元素没有后续元素,直接加到结果中。
  • 简化减法逻辑:res += arr[i]*-1等价于res -= arr[i],更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:16