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
的任何值将其转换回列表列表。然而,在这种情况下,在删除所有 ''
之后,5
的 list_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!=""]
因此很容易确定列表子列表的长度:
list_length = [len(w) for w in data]
但是有没有办法在忽略任何空列表条目的同时获取长度:''
?
我有一个列表列表,[data]
,其中一个子列表如下所示:
['GOM COD', '60', '.00', '', '0.00']
所以list_length
确定为5
。到现在为止,我会将列表列表转换为单个列表以删除所有 ''
条目,然后根据 list_length
的任何值将其转换回列表列表。然而,在这种情况下,在删除所有 ''
之后,5
的 list_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!=""]