从python中的多维列表中删除所有值为0的列表

时间:2018-04-12 09:35:13

标签: python-3.x list

a= [[0,0,0,0],[1,2,3,4],[5,6,7,8],[0,0,0,0],[0,0,0,0],[10,20,30,40],[0,0,0,0]]
for i in a:
    if all([ v == 0 for v in i]):
        a.remove(i)
print(a)

它给出的输出是

 [[1,2,3,4],[5,6,7,8],[10,20,30,40],[0,0,0,0]]

我不明白为什么它没有删除值为零的最后一个列表。

2 个答案:

答案 0 :(得分:1)

你错过了一个小细节 - 你需要反向迭代。

for i in reversed(range(len(a))):
    if all(v == 0 for v in a[i]):
        del a[i]

print(a)
[[1, 2, 3, 4], [5, 6, 7, 8], [10, 20, 30, 40]]

通过向前迭代,你缩小了列表的大小,所以循环永远不会完全迭代列表(因为你缩小了列表)。

答案 1 :(得分:0)

以下代码有助于

new_a = [l for l in a if set(l) != {0}]