代码之家  ›  专栏  ›  技术社区  ›  Florent

如何在python中删除无嵌套列表?

  •  0
  • Florent  · 技术社区  · 6 年前

    我有一个列表 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 回复  |  直到 6 年前
        1
  •  0
  •   Hari Menon    6 年前

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

    更好的方法是:

    data = [x for x in data if None not in x]
    
        2
  •  1
  •   Andrej Kesely    6 年前

    在迭代同一数组时,正在删除数据数组的成员这永远不是好办法。

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

    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)
    

    输出:

    []
    
        3
  •  1
  •   zamir Grijesh Chauhan    6 年前
    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)
    

    输出:

    []

        4
  •  -1
  •   Rob    6 年前
    data = [[1531785600000, None, None, None, None, 0.0], [1531872000000, None, None, None, None, 0.0]]
    
    del data[:]
    
    Output: []