首页 > 解决方案 > 为什么 list.remove() 在这个 for 循环中不起作用?

问题描述

我有一个列表列表:

W = [[5.0, 0, 0, 0, 0], [5.0, 0, 0, 0], [0, 0, 0], [5.0, 0, 0, 0], [5.0, 0, 0, 0]]

从 中的每个列表中W,我想删除零条目。

我尝试了以下方法:

for idx in range(len(W)):
    W[idx].remove(0)
print(W)

但它总会回来

[[5.0, 0, 0, 0, 0], [5.0, 0, 0, 0], [0, 0, 0], [5.0, 0, 0, 0], [5.0, 0, 0, 0]]

这里没有任何改变。我知道在迭代对象时无法更改对象,但是由于我不是在迭代W而是在迭代len(W),所以我不明白为什么我的代码不起作用。

我究竟做错了什么?

标签: pythonlist

解决方案


正如 avloss 所说, remove 只会删除第一次出现。做一个列表理解。

for idx in range(len(W)):
    W[idx] = [i for i in W[idx] if i != 0]
print(W)

正如@meowgoesthedog 建议的那样,您可以进行整体列表理解:

W = [lst[item for item in lst if item !=0] for lst in W]

推荐阅读