我有一个这种格式的项目列表:
['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
我需要把它变成一个由空项分隔的列表列表:
[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]
我只是不确定该怎么做。我确实尝试过嵌套循环,但没有按计划工作。
我发现有一种方法可以使用 itertools.groupby 来完成,但我无法弄清楚它的语法。
感谢所有的帮助!谢谢!
请您参考如下方法:
>>> from itertools import groupby
>>> a = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
>>> [list(items) for status, items in groupby(a, lambda v: v != '') if status]
[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]
groupby 接受一个可迭代对象和一个函数,并返回根据函数的返回值分组到集合中的项目。此示例检查返回值是否为 True,然后显式输出列表列表(这正是您在示例中想要的)。
编辑:这是@JonClements 在评论中建议的稍微更具可读性的版本(使用字符串转换为 bool 而不是 lambda功能):
[list(g) for k, g in groupby(a, bool) if k]
如果你不明确需要一个列表,你也可以这样做:
>>> for k, v in groupby(a, bool):
... if k:
... # do something with each group of values (v)
...
