如何在Python中使用“无”删除嵌套列表?

时间:2018-07-18 22:22:25

标签: python

我有一个带有None的列表,我想删除两个列表,以便数据变为空。但是由于某些原因,似乎for循环在删除第一个列表后被中止,我还缺少什么?

data = [[1531785600000, None, None, None, None, 0.0], [1531872000000, None, None, None, None, 0.0]]

for i,d in enumerate(data) :
    if None in d :
        del data[i]
data
Out[128]: [[1531872000000, None, None, None, None, 0.0]]

# Expected result :
data
Out[130]: []

谢谢

4 个答案:

答案 0 :(得分:1)

x = [[1531785600000, None, None, None, None, 0.0], [1531872000000, None, None, None, None, 0.0]]

当务之急

y = []

for i in x:
    if None not in i:
        y.append(i)

print(y)

列表理解

y = [i for i in x if None not in i]
print(y)

输出:

  

[]

答案 1 :(得分:1)

您要在迭代同一数组时删除数据数组的成员。那永远不是一个好的解决方案。

要删除不包含任何数据的成员,您可以尝试以下操作:

data = [[1531785600000, None, None, None, None, 0.0], [1531872000000, None, None, None, None, 0.0]]

data = [d for d in data if None not in d]
print(data)

输出:

[]

答案 2 :(得分:0)

永远不要在枚举循环中从列表中删除元素。因为一旦在第一个迭代中删除了data[0],列表本身的ID现在就会被修改并且只有一个元素,因此下一个enumerate不会返回任何内容(它认为它已经遍历了所有元素)。

更好的方法:

data = [x for x in data if None not in x]

答案 3 :(得分:-1)

data = [[1531785600000, None, None, None, None, 0.0], [1531872000000, None, None, None, None, 0.0]]

del data[:]

Output: []