2016-05-13 150 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']]