我有一个列表(我认为),如下所示:
[['Cats', 'Dogs', '', 'Gerbils'],
['Tigers', 'Snakes', '', 'Hamsters'],
['Iguanas', 'Snails', '', 'Worms']]
我需要通过忽略空白字段来构建新的列表列表。所以我的新列表看起来像这样:
[['Cats', 'Dogs', 'Gerbils'],
['Tigers', 'Snakes', 'Hamsters'],
['Iguanas', 'Snails','Worms']]
我对Python中的列表没有深入了解,所以我完全不知道如何做到这一点。任何人都能指出我会向我展示道路吗?
谢谢!
编辑:由Dan修正的列表列表语法
答案 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 ]