为什么 .remove inside for loop 不从 Python 中的列表中删除所有实例?



在输入我的问题标题时,Stack Overflow提供了一个指向这个问题的链接,其标题确实与我的问题几乎完全匹配:

在"for"循环中调用".remove(("不会删除所有元素

但是,这个问题是关于jQuery的,我以前从未听说过,而且示例代码似乎比我的要复杂得多。此外,对该问题的公认答案似乎是说代码多次扫描列表并在最后一次崩溃;我认为我的例子不是这种情况。

def f(x):
for num in x:
if num==np.NINF:
x.remove(num)
return x
print(f([0,np.NINF,np.NINF]))

这将返回 [0, -inf] 而不是预期的 [0]。为什么?

我重复一遍,永远不要像使用时一样在for循环中使用mutable对象的remove函数。如果你使用它会发生什么?让我演示一下。

只是说我想使用与您相同的方法删除列表中的所有值。

x=[1,2,3,4,5,6,7,8]
for i in x:
x.remove(i)
print(x)

您认为输出会是什么?

正如预期的那样,它应该是一个空列表,对吧?

不!

上面的程序打印以下输出。

[2, 4, 6, 8]

为什么会这样?

您正在调用可变对象的元素并同时删除它们,这将重置整个对象及其元素。

现在,我想你可以理解为什么你的程序返回错误的输出。

您可以通过多种方式实现所需的输出。我给你一条路。

import numpy as np 
def f(x):
output=[]
for num in x:
if num!=np.NINF:
output.append(num)
return output
print(f([0,np.NINF,np.NINF]))

上述函数的输出是必需的。

[0]

这应该适合您。

最新更新