python-3.x - 编写删除重复元素的程序时列表索引超出范围

标签 python-3.x

我正在尝试删除重复元素,但它在 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]不存在。

为了避免这种情况,您有以下选择:

  1. 将非重复元素插入新列表。 (或者,复制原始列表并从那里弹出)。

  2. 使用set关于list ,如果您被允许使用它。

另外,旁注:list(input().split())是对 list 的多余调用构造函数。 .split()方法返回 list默认情况下。 所以就n=input().split()就够了。

关于python-3.x - 编写删除重复元素的程序时列表索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847539/

相关文章:

python-3.x - 如何在 sqlAlchemy 中使用 "Like"运算符

python-3.x - zappa 可以用来直接运行函数吗(非 wsgi 应用程序)

python - 如何将多列(即时间、年、月和日期)转换为 pyspark 数据框中的日期时间格式

python - MultiheadAttention 的可学习参数数量

python - 如何将视频转换为 numpy 数组?

python - python中的N叉树

django - Django REST 框架过滤有问题吗?

python - 是否有可能 "hack"Python 的打印功能?

python - 如何在 Windows 上的 Python 3 中运行子进程以转换视频?

python - 无法使用scrapy从网页中获取不同列表的标题