如何在Python 2中使用旧列表中的特定项创建新列表?

时间:2014-09-20 23:29:58

标签: python list python-2.7

我有一个列表(我认为),如下所示:

[['Cats', 'Dogs', '', 'Gerbils'],
['Tigers', 'Snakes', '', 'Hamsters'],
['Iguanas', 'Snails', '', 'Worms']]

我需要通过忽略空白字段来构建新的列表列表。所以我的新列表看起来像这样:

[['Cats', 'Dogs', 'Gerbils'],
['Tigers', 'Snakes', 'Hamsters'],
['Iguanas', 'Snails','Worms']]

我对Python中的列表没有深入了解,所以我完全不知道如何做到这一点。任何人都能指出我会向我展示道路吗?

谢谢!

编辑:由Dan修正的列表列表语法

2 个答案:

答案 0 :(得分:4)

l = [['Cats', 'Dogs', '', 'Gerbils'],
     ['Tigers', 'Snakes', '', 'Hamsters'],
     ['Iguanas', 'Snails', '', 'Worms']]

[[i for i in sub if i] for sub in l]

输出

[['Cats', 'Dogs', 'Gerbils'],
 ['Tigers', 'Snakes', 'Hamsters'],
 ['Iguanas', 'Snails', 'Worms']]

答案 1 :(得分:3)

newlist = [ filter(None, x) for x in oldlist ]

回应评论时编辑:

使用filter(bool, x)filter(None, x)更具可读性是有争议的。实际上它们是相同的,都意味着"过滤掉假/无/空/零"的项目。

在python 3中,filter返回一个可迭代对象而不是一个列表,因此等价物将是

newlist = [ list(filter(None, x)) for x in oldlist ]

newlist = [ list(filter(bool, x)) for x in oldlist ]

每个都相当于

[ [ item for item in x if item ] for x in oldlist ]