我有一个清单清单:
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]]
Run Code Online (Sandbox Code Playgroud)
W我要从中的每个列表中删除零个条目。
我尝试了以下方法:
for idx in range(len(W)):
W[idx].remove(0)
print(W)
Run Code Online (Sandbox Code Playgroud)
但它总是会回来
[[5.0, 0, 0, 0, 0], [5.0, 0, 0, 0], [0, 0, 0], [5.0, 0, 0, 0], [5.0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
这里什么都没有改变。我知道以下事实:在遍历对象时无法更改对象,但是由于我没有遍历W而是遍历len(W),所以我不明白为什么我的代码无法正常工作。
我究竟做错了什么?
正如avloss所说,那个remove只删除第一次出现。做一个列表理解。
for idx in range(len(W)):
W[idx] = [i for i in W[idx] if i != 0]
print(W)
Run Code Online (Sandbox Code Playgroud)
并按照@meowgoesthedog的建议,您可以进行整体列表理解:
W = [lst[item for item in lst if item !=0] for lst in W]
Run Code Online (Sandbox Code Playgroud)