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来完成它,但我无法弄清楚它的语法.
我感谢所有的帮助!谢谢!
>>> 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)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |