通过取出小于一定长度的项目来过滤列表列表 - 更多的pythonic方式?

时间:2014-07-01 17:32:36

标签: python list

我正在阅读this,但我不确定如何查看列表中单个项目的长度。我在下面有以下庞大的代码,我想知道是否有更多的pythonic方法来做到这一点?

indexdf =   [['1','','1',], ['1', '']]

listy = []
for ilist in indexdf:
    listx = [ ]
    #print ilist
    for x in ilist:
        #print x
        if len(x) > 0:
            listx.append(x)
    listy.append(listx)

输出

listy = [['1','1']. ['1']]

2 个答案:

答案 0 :(得分:2)

listy = [ [x for x in ilist if len(x) > 0] for ilist in indexdf]

还有一个技巧,因为你的例子中的“特定长度”恰好排除了空字符串:

[x for x in ilist if len(x) > 0]

可以替换为

list(filter(None, ilist))

在Python 3中或只是

filter(None, ilist)

在Python 2中,或

[x for x in ilist if x]

其中任何一个。

答案 1 :(得分:0)

您可以在此处使用嵌套列表解析。请注意,空字符串将在布尔上下文中返回False。空列表,元组等也是如此。

>>> lst = [['1','','1',], ['1', '']] 
>>> lst = [[x for x in sl if x] for sl in lst]
>>> lst
[['1', '1'], ['1']]