我有一个清单:
lst = [0, -7, 0, 0, -8, 0, 0, -4, 0, 0, 0, -6, 0, -4, -29, -10, 0, -16, 0, 0, 2, 3, 0, 18, -1, -2, 0, 0, 0, 0, 0, 0, 21, 10, -10, 0, -12, 3, -5, -10]
Run Code Online (Sandbox Code Playgroud)
我希望在值后跟两个连续的零时创建带有条件中断的子列表组.
所以我的中间清单会喜欢
newlst = [-7,-8,-4,[-6,-4,-29,-10,-16],[2,3,18,-1,-2],[21,10,-10,-12,3,-5,-10]]
Run Code Online (Sandbox Code Playgroud)
而最终输出将是子列表的总和:
[-7,-8,-4,-65,18,-3]
Run Code Online (Sandbox Code Playgroud)
我尝试在枚举的for循环中使用索引号,但我没有得到我想要的输出.
我根据他们是否持有任何真相来对相邻数字组成对.然后拿起真正的小组并总结它们.可能有点太复杂,但我喜欢使用any密钥.
>>> from itertools import groupby
>>> [sum(a for a, _ in g) for k, g in groupby(zip(lst, lst[1:] + [0]), any) if k]
[-7, -8, -4, -65, 20, -3]
Run Code Online (Sandbox Code Playgroud)
(感谢blhsing和ShadowRanger的改进.)
将对将变回单一的更短的方式(首先是Python 2,第二是Python 3):
>>> [sum(zip(*g)[0]) for k, g in groupby(zip(lst, lst[1:] + [0]), any) if k]
>>> [sum(next(zip(*g))) for k, g in groupby(zip(lst, lst[1:] + [0]), any) if k]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |