2016-03-04 73 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