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

Python - find length of sublists in a list, ignoring empty entries

因此很容易确定列表子列表的长度:

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

但是有没有办法在忽略任何空列表条目的同时获取长度:''?

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

['GOM COD', '60', '.00', '', '0.00']

所以list_length确定为5。到现在为止,我会将列表列表转换为单个列表以删除所有 '' 条目,然后根据 list_length 的任何值将其转换回列表列表。然而,在这种情况下,在删除所有 '' 之后,5list_length 值最终不正确并创建一个混乱的 DataFrame。

我确实尝试删除所有带有 data = list(filter(None, data)) 的空字符串条目,但这只会删除那些完全由 ''.

组成的子列表

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

我问的可能吗?或者甚至是最聪明的方法?

谢谢。

您似乎在错误的级别应用了 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个非空字符串。

使用地图,

data = ['GOM COD', '60', '.00', '', '0.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!=""]