【发布时间】:2020-07-03 03:51:07
【问题描述】:
在输入我的问题的标题时,Stack Overflow 提供了一个指向该问题的链接,其标题确实与我的问题几乎完全匹配:
Calling `.remove()` inside `for` loop doesn't remove all elements
但是,这个问题是关于 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]。为什么?
【问题讨论】:
-
尝试修改您正在迭代的相同序列将会导致眼泪,无论您尝试使用哪种语言。
-
一般来说,在迭代列表时修改列表是 python 中的禁忌(以及其他语言,你自己注意到了 javascript)。您可以通过多种方式处理此问题(反向遍历列表,使用空切片
[:]或list修复原始列表,收集索引,创建不包含不需要元素的新列表,...) -
尝试使用
for num in x[:]:,这将复制原始列表。