从 python 列表中删除空行

delete empty rows from a python list

现在我有一个 python 列表,如下所示:

['',     '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ]
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'      ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'          ]
['87878', '',                   'cn/zhs/fedex/inet/label/international']
['',     '2015-10-21 00:00:18', ''                                     ]
[5454,   '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking'    ]
['',     '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]

这个二维列表有3列,超过一万行。 如您所见,有些行在 [0] 处缺少元素,有些行在 [1] 处缺少元素,有些行在 [2] 处缺少元素。 有些具有所有三个元素。 我需要删除所有那些没有三个元素的行。

也就是说,只要一行缺少一个元素,就需要将其删除。 因此,对于上面的列表,需要删除 row[0][3][4][5][6]

执行删除功能后,列表应如下所示:

[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'      ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'          ]

我在考虑这个:

for i in range(len(D)):          //D is the name of my list
    if D[i][0] =='' or D[i][1]=='' or D[i][2] =='':
        del D[i]

但这不起作用,因为当您截断列表时,len(D) 正在发生变化,您将无法遍历整个列表。

我也想过这个:

for item in D:
    if item[0]=='' or item[1]=='' or item[2] =='':
        del item

这也不行。

如果你能想出点什么,我将不胜感激。

我会使用 D = filter(all, D)D = filter(lambda x: '' not in x, D),具体取决于您对“empty”的确切定义。

考虑这个程序:

from pprint import pprint

D = [
    ['',     '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
    [398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'      ],
    [878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'          ],
    ['87878', '',                   'cn/zhs/fedex/inet/label/international'],
    ['',     '2015-10-21 00:00:18', ''                                     ],
    [5454,   '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking'    ],
    ['',     '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ],
]

D2 = filter(all, D)
D3 = filter(lambda x: '' not in x, D)
assert D2 == D3

pprint(D2)
pprint(D3)

郑重声明,如果您将示例数据显示为我可以复制和粘贴的实际列表,那将会很有帮助。

all 函数 returns 仅当 it 参数的所有元素都为真时才为真。例如:

>>> all([1, 2, 3])
True
>>> all(['', 2, 3])
False
>>> all([1, 2, 0])
False

通过在列表推导中遍历您的列表列表,可以相对容易地生成您想要的内容。

tlist = [
    ['',     '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
    [398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'      ],
    [878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'          ],
    ['87878', '',                   'cn/zhs/fedex/inet/label/international'],
    ['',     '2015-10-21 00:00:18', ''                                     ],
    [5454,   '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking'    ],
    ['',     '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]]
result = [r for r in tlist if all(x for x in r)]

result 现在将包含

[[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'],
 [878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'],
 [5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking']]