通过去除小于特定长度的项来过滤列表中的列表 - 更佛教的方法?
我在看这个问题,但是我不太确定怎么用同样的方法来检查列表中每个项目的长度。我有下面这段比较复杂的代码,我在想有没有更简洁、更符合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]
在这两种情况下都可以。