Skip to main content
 首页 » 编程设计

python之为什么 list.remove() 在此 for 循环中不起作用

2025年05月04日10lhb25

我有一个列表列表:

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) 上迭代,所以我不知道不明白为什么我的代码不起作用。

我做错了什么?

请您参考如下方法:

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

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]