我需要将列表拆分为列表列表[Python]

Dra*_*rac 1 python list python-itertools

我有这种格式的项目列表:

['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
Run Code Online (Sandbox Code Playgroud)

我需要把它变成由空项分隔的列表列表:

[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]
Run Code Online (Sandbox Code Playgroud)

我只是不确定该怎么做.我确实尝试过做一个嵌套循环但是没有按计划工作.

我发现有一种方法可以使用itertools.groupby来完成它,但我无法弄清楚它的语法.

我感谢所有的帮助!谢谢!

Pet*_*son 7

>>> 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']]
Run Code Online (Sandbox Code Playgroud)

groupby获取一个iterable和一个函数,并根据函数的返回值返回分组为集合的项.此示例检查返回值是否为True,然后显式输出列表列表(这是您在示例中所需的).

编辑:这是一个稍微更易读的版本,由@JonClements在评论中建议(使用字符串转换bool代替lambda函数):

[list(g) for k, g in groupby(a, bool) if k]
Run Code Online (Sandbox Code Playgroud)

如果您没有明确需要列表,您还可以执行以下操作:

>>> for k, v in groupby(a, bool):
...     if k:
...         # do something with each group of values (v)
...
Run Code Online (Sandbox Code Playgroud)

  • 这是我做的方式,但我用`bool`替换`lambda v:v!=''` (2认同)