python - 计算累积和直到出现零
问题描述
我有一个(长)列表,其中随机出现零和一:
list1 = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
1.我想再拿一份清单
- 列表的总和,直到出现 0
- 出现 0 的地方,在列表中保留 0
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]
解决方案
您可以使用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]
推荐阅读
- ruby-on-rails - 按属性“分箱”记录:如何构造 ActiveRecord 调用?
- django - 部署 Angular 8 和 django rest 框架
- python - 二进制数除以 2 和 8
- mapbox - Mapbox FireEvent 的替代品
- c++ - 使用 ncurses 术语给我一个错误
- r - R DT:在交互式 htmlwidget DT 数据表中选择特定列
- c++ - 我的线程功能不会停止我想要的线程
- jquery - 如何在我的表中使用 jQuery 修复实时搜索?
- python - 如何删除字典列表的元素
- android - 在 app 模块中使用 buildSrc 模块版本