2016-05-13 118 views
1

我有這樣一個列表的列表:Python從列表中的列表中刪除空元素

[['A001', 'atendimento', 'sust', 'concessionário', 'adv', 'bom', 'adj', '', ''], 
['A001', 'falar', 'verb', 'ter', 'verb', 'nada', 'pron', 'carro', 'sust', '', ''], 
['A001', 'não', 'adv', 'perguntar', 'verb', 'problema', 'sust', 'carro', 'sust', '', ''], 
['A001', 'não', 'adv', 'oferecer', 'verb', 'ligar', 'verb', 'compra', 'sust', '', ''], 
['A001', 'não', 'adv', 'oferecer', 'verb', 'serviço', 'sust', 'compra', 'sust', '', '']] 

而且我想刪除從每個列表空元素獲得列表的一個新的列表,而空的元素:

[['A001', 'atendimento', 'sust', 'concessionário', 'adv', 'bom', 'adj'], 
['A001', 'falar', 'verb', 'ter', 'verb', 'nada', 'pron', 'carro', 'sust'], 
['A001', 'não', 'adv', 'perguntar', 'verb', 'problema', 'sust', 'carro', 'sust'], 
['A001', 'não', 'adv', 'oferecer', 'verb', 'ligar', 'verb', 'compra', 'sust'], 
['A001', 'não', 'adv', 'oferecer', 'verb', 'serviço', 'sust', 'compra', 'sust']] 

我怎麼能做到這一點?

我嘗試這樣做:

str_list = filter(None, list_of_lists) 
+0

可能的複製的[Python的:如何從列表中刪除空列表?(http://stackoverflow.com/questions/4842956/python-how-to-remove-empty-lists-from-a-list) – Sandeep

回答

6

您試圖從列表清單中,從子列表不是空的元素刪除空列表。相反,過濾器應用到子列表:

str_list = [list(filter(None, lst)) for lst in list_of_lists] 

filter()該呼叫的情況下,包裹着list()你碰巧在python3稍後嘗試這一點,因爲在filter() PY3返回迭代器。

注意,因爲你這個標記作爲你可能要小心,因爲過濾可能會產生與錯誤的列不同的長度和項目行。如果你知道每一行的最後2個項目將永遠是空的,你可以切出來:

str_list = [row[:-2] for row in list_of_lists] 
+0

注到OP:即使在Python 3中,「list」調用也是如此可選取決於你需要做什麼。迭代器不是邪惡的,它們只是支持更少的索引。 –

+0

事實上,只是試圖保持數據接近原始數據。迭代器真的很方便,如果你以後只需要查看一次數據。 –

1

您可以join

output = [' '.join(i).split() for i in list_of_list] 

輸出繼電器做

[['A001', 'atendimento', 'sust', 'concession\xc3\xa1rio', 'adv', 'bom', 'adj'],['A001', 'falar', 'verb', 'ter', 'verb', 'nada', 'pron', 'carro', 'sust'],['A001','n\xc3\xa3o','adv','perguntar','verb','problema','sust','carro','sust'],['A001','n\xc3\xa3o','adv','oferecer','verb','ligar','verb','compra','sust'],['A001','n\xc3\xa3o','adv','oferecer','verb','servi\xc3\xa7o','sust','compra','sust']]