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

实现列表去重时出现Index out of range错误的技术咨询

分析与修复:列表去重时的"list index out of range"错误

错误原因拆解

你的代码触发索引越界,主要有两个核心问题:

  • 把列表元素当成索引来用:
    for i in myList这个循环遍历的是列表里的元素值,不是元素的索引!比如第一次循环i是1(列表第一个元素),然后你写t = myList[i],实际取的是myList[1]也就是2,这本身逻辑就错了。当元素值大于等于当前列表长度时(比如原列表里的9,当列表长度缩短后,9作为索引肯定超过范围),直接就会抛出list index out of range。

  • 遍历过程中修改列表长度导致索引混乱:
    当你用del myList[j]删除元素时,列表的长度会立刻缩短,后续元素会向前移位。比如你删除了索引j的元素,原来索引j+1的元素现在跑到了j的位置,但你的循环会继续走到j+1,这不仅会跳过这个元素,还可能在循环后期因为j超过了缩短后的列表长度而触发索引越界。


正确的列表去重实现方法

根据你的需求(保留元素首次出现的顺序,仅保留唯一元素),这里提供几种常用方案:

方案1:利用字典有序性(Python 3.7+推荐)

Python 3.7及以上版本中,字典会保留键的插入顺序,我们可以用dict.fromkeys()快速去重,同时保持原顺序:

myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
unique_list = list(dict.fromkeys(myList))
print("The list with unique elements only:")
print(unique_list)  # 输出: [1, 2, 4, 6, 9]

方案2:遍历+已见集合(兼容所有Python版本)

手动遍历列表,用一个集合记录已经见过的元素,只保留首次出现的元素:

myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
seen = set()
unique_list = []
for num in myList:
    if num not in seen:
        seen.add(num)
        unique_list.append(num)
print("The list with unique elements only:")
print(unique_list)  # 输出: [1, 2, 4, 6, 9]

方案3:修复你原来的索引遍历思路

如果你想基于原有的嵌套循环思路修复,可以倒序遍历索引,这样删除元素不会影响前面的索引(因为我们从后往前处理,前面的索引位置不会因为后面元素被删而移位):

myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
# 倒序遍历索引,从最后一个元素到第一个
for i in range(len(myList)-1, -1, -1):
    t = myList[i]
    # 遍历当前元素之前的所有元素(因为倒序,所以i-1到0)
    for j in range(i-1, -1, -1):
        if myList[j] == t:
            del myList[j]
print("The list with unique elements only:")
print(myList)  # 输出: [1, 2, 4, 6, 9]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:53:11