执行循环时,存在范围问题,我无法识别:
def eliminar_elementos(x):
Control=len(x)
y=int(input("Ingrese elemento a eliminar:"))
for j in range(Control):
if x[j]==y:
remover=x[j]
x.remove(remover)
它给了我一个范围错误,因为在删除一个元素时,列表会缩小。我应该如何解决它?缩小范围?
如果您想“就地”删除重复项,而不创建新列表,则按照您的原始想法,关键是以相反的顺序迭代列表,以便剩余索引始终有效,因为我们总是删除它们之后的元素:
关键在
range(len(x) - 1, -1, -1)
. 第一个参数 (start
) 将是列表的最后一个索引,它等于列表中的元素数减一(索引基数为 0)。第二个是-1
,由于最后生成的索引是0(列表的第一个元素),我们必须记住range
它不包括stop
范围内的值,所以它不能为0,否则只会迭代到1。第三个 (step
) 在逻辑上也必须为 -1,因为范围是len(x) - 1
通过在每一步减去 1 生成的从 0 到 0。del
允许您使用它的索引从列表中删除一个元素,list.remove
它删除作为参数传递的元素的第一次出现,它可以用于此目的但使用 awhile
,但是它效率较低,因为它需要反复迭代列表。您可以使用列表理解进行过滤: