我正在尝试删除重复元素,但它在 l=n[i] 处显示列表索引超出范围错误
n=list(input().split())
for i in range(len(n)):
l=n[i]
for j in range(len(n)):
if(j!=i):
if(l==n[j]):
n.pop(j)
print(n)
最佳答案
它显示错误,因为您 pop
来自内部的元素,这在迭代时改变了列表的大小。但是range
函数仍然具有原始长度,因此给出的索引不再存在。
在迭代列表时,您不应该永远更改列表的长度(或字典的 keys
)。
详细一点,我们来看看你的 list n=[1,1,2,3]
(说)。 i
将在 range(3)
中运行(即取值 0,1,2,3
)
现在,l=n[0], i.e. l=1
。然后在j=1, n[j]=1
,条件l==n[j]
转true
你做n.pop(1)
.
现在,您的列表 n=[1,2,3]
但你最外层的循环仍然在 range(4)
中因此当你这样做 l=n[3]
时会给出错误自 n[3]
不存在。
为了避免这种情况,您有以下选择:
将非重复元素插入新列表。 (或者,复制原始列表并从那里弹出)。
使用
set
关于list
,如果您被允许使用它。
另外,旁注:list(input().split())
是对 list
的多余调用构造函数。 .split()
方法返回 list
默认情况下。
所以就n=input().split()
就够了。
关于python-3.x - 编写删除重复元素的程序时列表索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847539/