为什么我的代码给出列表索引超出范围的值错误?

问题描述 投票:0回答:2
inp_list=[10,1,11,1,29,876,768,10,11,1,92,29,876]

for i in range(len(inp_list)):
    for j in range(i+1, len(inp_list)):
        if (inp_list[i]==inp_list[j]):
            inp_list.remove(inp_list[i])
            
print(inp_list)

在代码中,我试图删除列表中的重复元素。它给了我第

if (inp_list[i]==inp_list[j):
行的 ValueError,我无法理解为什么它向我显示错误。

我尝试在第一个 for 循环中使用索引号来循环遍历列表的元素。在第二个for循环中,我试图循环遍历索引号为index+1的元素,但我将范围的结束值限制在列表的长度内。尽管如此,我还是收到了 ValueError,表示列表索引超出范围。

我预计输出是这样的: [10,1,11,29,876,768,92]

python-3.x list loops valueerror
2个回答
0
投票

转换为集合将删除所有重复项。

output_list = list(set(inp_list)) 

如果您想保持相同的订单

from collections import OrderedDict 

output_list = list(OrderedDict.fromkeys(inp_list))

查看详情这里


0
投票

问题是您要从 inp_list

删除
元素,这意味着它会变短,但是您循环的范围仍然具有数组旧大小的索引。所以你最终会越过现在更短的数组的末尾。

© www.soinside.com 2019 - 2024. All rights reserved.