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]]
我不明白为什么它没有删除值为零的最后一个列表。
答案 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}]