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

Python报IndexError: list index out of range错误,求原因及解决方法

错误原因
  • 把元素值当成索引使用:for i in a循环里的i是a列表中的元素(比如a是[5,6],i就是5、6),你用a[i]相当于取a列表第5个索引的元素,而a的长度只有2,索引最大是1,直接越界触发IndexError。
  • 错误赋值pop的返回值:a = a.pop(i)完全错误,pop()方法返回的是被删除的单个元素,执行后a会变成一个整数,后续再操作a肯定出问题,正确写法是直接a.pop(index),不需要赋值给a。
  • 遍历原列表时修改它:循环过程中删除列表元素会导致列表长度变化,后面的元素前移,循环会跳过部分元素,逻辑彻底混乱。
  • 后续代码的低级错误:len(a[i])里的a[i]是整数,整数没有len()属性,这行代码执行也会报错。
解决方法
  1. 先找交集元素:把其中一个列表转成集合,快速找出两个列表的共同元素(集合查找时间复杂度是O(1))。
  2. 生成新列表而非修改原列表:用列表推导式生成移除共同元素后的新列表,避免遍历原列表时修改导致的问题。
  3. 修正m的计算逻辑:原代码的m计算逻辑混乱,假设需求是移除共同元素后,统计两个列表对应位置元素不同的数量,以及长度差异部分每个元素算1次(比如a比b长2个元素,就加2),调整循环逻辑即可。
修正后的代码
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    
    # 找出两个列表的交集元素(去重)
    common = set(a) & set(b)
    
    # 生成移除共同元素后的新列表
    new_a = [num for num in a if num not in common]
    new_b = [num for num in b if num not in common]
    
    m = 0
    # 先统计对应位置不同的数量
    for x, y in zip(new_a, new_b):
        if x != y:
            m += 1
    # 再统计长度差异的部分,每个额外元素算1次
    m += abs(len(new_a) - len(new_b))
    
    print(m)
额外说明

如果需求是移除成对出现的共同元素(比如a里有一个2,b里有一个2,就各删一个;a里有两个2,b里有一个2,就删a的一个2和b的一个2),用计数器处理更合适:

from collections import Counter

for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    
    cnt_a = Counter(a)
    cnt_b = Counter(b)
    
    # 生成移除成对共同元素后的新列表
    new_a = []
    for num in a:
        if cnt_a[num] > 0 and cnt_b.get(num, 0) > 0:
            cnt_a[num] -= 1
            cnt_b[num] -= 1
        else:
            new_a.append(num)
    
    new_b = []
    for num in b:
        if cnt_b[num] > 0:
            new_b.append(num)
    
    # 计算m的逻辑和之前一致
    m = 0
    for x, y in zip(new_a, new_b):
        if x != y:
            m += 1
    m += abs(len(new_a) - len(new_b))
    
    print(m)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:10