如何在Python中从列表列表中删除值

如何在Python中从列表列表中删除值,python,list,python-3.x,nested-lists,Python,List,Python 3.x,Nested Lists,我有一份清单 [['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 我要从列表中删除所有“” 我尝试的代码是: >>> for line in list: ... if line == '': ... list

我有一份清单

[['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']]
有人能告诉我这有什么问题吗?

这就是你想要的:

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
在每个步骤中都成为整个子列表,而不是子列表的元素

现在,您似乎正在尝试就地修改原始列表(而不创建任何附加变量)。这是一个崇高的原因,但在循环时通过正在修改的列表进行循环是不可取的,可能会导致代码引发错误(
indexer
或其他)


最后,不要使用名称
列表
,因为Python正在内部使用它,您正在覆盖它的预期用途。

您在子列表上运行测试,而不是在子列表包含的项上运行测试。您需要一个嵌套的
,以便
执行您想要的操作。但是,在迭代过程中使用
list.remove
从列表中删除项通常会导致不可预测的结果

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

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

显式测试可能更好,因为这样可以过滤掉所有错误values@MosesKoledoye对。谢谢嵌套列表来自哪里?最好首先不使用
'
创建它们。@mkrieger1我有一个未正确分隔的原始文件。我将其转换为列表,从而得到输出。想要删除那些不需要的值。我的意思是:如果您向我们展示了如何创建列表,我们可能会告诉您如何避免
'
条目,并且您无需再次删除它们。(可能相关:)@mkrieger1那会更好。我会制作一个示例文件,并用我执行的代码编辑帖子。