OK,这个问题其实已经解决了,但是我还是想知道WHY。我正在尝试从二维数组中删除元素,代码如下:
print("adj in the while loop: ", adj)
for z in adj:
print("for loop: ", z)
if z[-1] is True:
adj.remove(z)
result += 1
print("adj after all execution: ", adj)
控制台输出:
adj in the while loop: [[1, True], [0, 2, True], [1, True]]
for loop: [1, True]
for loop: [1, True]
adj after all execution: [[0, 2, True]]
这没有按预期工作。执行后正确的输出应该是[]。
所以我开始使用列表理解来编辑代码。
列表理解代码:
adj = [z for z in adj if z[-1] is not True]
它按预期工作。输出为 []。
这让我很困惑。为什么这两种看似相同的方法会产生不同的结果呢?谁能给我解释一下?
请您参考如下方法:
这两种方法并不相同。在列表理解中,您永远不会调用 adj.remove(z)。
列表理解在遍历 adj 时创建一个新列表,然后在完成后将该(空)列表分配回 adj。它不会在迭代时更改 adj,仅在最后一次迭代之后。
