首页 > 解决方案 > 我想使用 for 循环从列表中删除重复项。我在这里遇到索引超出范围错误:if lst[i]==lst[j]:

问题描述

我已经声明了一个列表并对其进行了排序。在迭代第二个 for 循环时,我得到 :index out of range 错误。

lst=[]

for i in range(5):
    a=int(input())
    lst.append(a)

lst.sort()
print(lst)

for i in range(0,len(lst)):
    j=i+1
    for j in range(len(lst)):
        if lst[i]==lst[j]:
            print("hii")
            lst.pop(j)

print(lst)

标签: pythonduplicates

解决方案


当您从它的长度更改中删除元素时,lst因此您的迭代在尝试访问空索引时会中断:“索引超出范围”

如果你想保持你的结构,你可以捕捉它并使用 IndexError 上的 try/catch 退出循环,但这真的很难看。

一个更 Pythonic 的解决方案是简单地将您的列表转换为一个集合,然后返回到列表。这是有效的,因为集合删除了所有重复的元素:

>>> list(set([1, 1, 2, 2, 3, 4,]))
[1, 2, 3, 4]

推荐阅读