在输入我的问题标题时,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]
这应该适合您。