通过去除小于特定长度的项来过滤列表中的列表 - 更佛教的方法?

2 投票
2 回答
685 浏览
提问于 2025-04-18 11:46

我在看这个问题,但是我不太确定怎么用同样的方法来检查列表中每个项目的长度。我有下面这段比较复杂的代码,我在想有没有更简洁、更符合Python风格的方法来实现这个功能呢?

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

你可以在这里使用嵌套的列表推导式。要注意的是,空字符串在布尔上下文中会返回 False。空列表、元组等也是如此。

>>> lst = [['1','','1',], ['1', '']] 
>>> lst = [[x for x in sl if x] for sl in lst]
>>> lst
[['1', '1'], ['1']]
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]

在这两种情况下都可以。

撰写回答