首页 > 解决方案 > 计算累积和直到出现零

问题描述

我有一个(长)列表,其中随机出现零和一:

list1 = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]

1.我想再拿一份清单

list2 = [3, 0, 2, 0, 1, 0, 3]

它应该适用于极端情况以及开始或结束时的零 list1 = [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0] list2 = [0, 3, 0, 2, 0, 1, 0, 3, 0]

标签: pythonlist

解决方案


您可以使用itertools.groupby

from itertools import groupby

list1 = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]

out = []
for v, g in groupby(list1):
    if v:
        out.append(sum(g))
    else:
        out.extend(g)  # or out.append(0) if you want to keep only single zero

print(out)

印刷:

[3, 0, 2, 0, 1, 0, 3]

因为list1 = [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]它打印:

[0, 3, 0, 2, 0, 1, 0, 3, 0]

推荐阅读