Skip to main content
 首页 » 编程设计

python之使用 for 循环从列表中删除元素不起作用,但使用列表理解很好

2025年05月04日11telwanggs

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,仅在最后一次迭代之后。