2017-05-05 63 views
1

删除值我有一个列表,如何从名单列表在Python

[['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 

我想从列表中删除所有的“”。

我试过的代码是:

>>> for line in list: 
...  if line == '': 
...   list.remove(line) 
... 
print(list) 

,它显示的输出为:

[['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 

有人建议可以有什么错呢?

+0

哪里嵌套表从何而来?首先不用“'''创建它们会更好。 – mkrieger1

+0

@ mkrieger1我有一个未正确分隔的原始文件。我转换为列表并因此输出。想要删除这些不需要的值。 –

+1

我的意思是:如果你向我们展示了如何创建列表,我们可以告诉你如何避免这些条目,而不需要再次删除它们。 – mkrieger1

回答

4

这是你想要什么:

a = [['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 
b = [[x for x in y if x != ''] for y in a] # kudos @Moses 
print(b) # prints: [['Name', 'Place', 'Batch'], ['11', 'BBI', '2015'], ['12', 'CCU', '2016'], ['13', 'BOM', '2017']] 

您的解决方案不起作用,因为line成为每一步的整个子表和子表中没有的元素。

现在看来您正试图在原地修改原始列表(不创建任何附加变量)。这是一个崇高的原因,但循环列表,你正在修改,因为你正在循环不建议,并可能导致您的代码引发错误(IndexError或其他)。

最后,请勿使用名称list,因为Python在内部使用它,并且您正在覆盖其预期的用法

+2

明确的测试可能会更好,因为这会过滤掉所有* falsy *值 –

+0

@MosesKoledoye True。谢谢! –

2

您正在对子列表运行测试,而不是它们包含的项目。你需要一个嵌套for做你想做的。但是,迭代时从list.remove列表中删除项目通常会导致不可预知的结果。

但是,您可以使用列表理解过滤掉空字符串:

r = [[i for i in x if i != ''] for x in lst] 
#      ^^ filter condition