2016-03-04 76 views
0

删除空行现在我有一个Python列表,看起来像这样:从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' ] 

此2D名单有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 

这也不会在所有。

我真的很感激,如果你能想出一些东西。

+0

为什么'行[5]'被删除? –

+0

可能的重复:http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python。你可以在其他问题中找到你所寻求的答案。 –

回答

1

根据记录,那将是有益的,如果你想显示您的样本数据,我可以复制并粘贴实际列表。

all函数仅在其参数的所有元素都为真时才返回True。例如:

>>> 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']] 
+0

OMG!从未想过使用全部。谢谢! – JY078

3

我会使用D = filter(all, D)或许可以D = filter(lambda x: '' not in x, D),这取决于您的确切定义“”。

考虑此程序:

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) 
+0

非常感谢你 – JY078