Python - 查找列表中的子列表长度,忽略空条目

时间:2017-08-02 14:36:46

标签: python list sublist

因此,使用以下方法确定列表子列表的长度非常容易:

list_length = [len(w) for w in data]

但有没有办法在忽略任何空列表条目的情况下获取长度:''

我有一个列表列表[data],其中一个子列表如下所示:

['GOM COD', '60', '$2.00', '', '$120.00']

因此list_length被确定为5。到目前为止,我会将列表列表转换为单个列表,以便删除所有''条目,然后根据list_length的值将其转回列表列表。但是,在这种情况下,删除所有''后,list_length的{​​{1}}值最终会变得不正确并创建一个混乱的DataFrame。

我尝试使用5删除所有空字符串条目,但只删除那些完全由data = list(filter(None, data))组成的子列表。

所以我希望最终能够在忽略或排除''的同时确定子列表的长度,因为我必须在许多文件上运行此代码,因此它必须足够强大才能读取正确的''

我可以提出什么问题?甚至是最聪明的方法呢?

感谢。

2 个答案:

答案 0 :(得分:5)

好像你正在将filter应用于错误的级别。在大多数情况下,我个人更喜欢列表理解而不是filter

[len([x for x in w if x != '']) for w in data]

使用过滤器:

[len(list(filter(None, w))) for w in data]

修改

这样更有效,因为它不必构建新列表:

[sum(1 for x in w if x != '') for w in data]

要清除评论中发生的混淆,请记住我们已经获得列表。这是一个有效的输入:

data = [
    ['a', 'b', 'c'],
    ['d', '', 'e'],
]

上述任何表达式data的值都是[3, 2],因为第一个子列表有3个非空字符串,第二个子列表有2个非空字符串。

答案 1 :(得分:1)

使用地图,

data = ['GOM COD', '60', '$2.00', '', '$120.00']
[x for x in map(len, data) if x!=0]

或使用过滤器:

[len(x) for x in list(filter(lambda x: x != '', data))]

或使用地图和过滤器:

map(len, list(filter(lambda x: x != '', data)))

使用列表理解:

[len(x) for x in data if x!=""]