You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何更简洁实现列表连续1累计计数并生成新列表

连续1累计计数的简洁实现方案

首先明确需求:给定仅含0、1的列表,逐位统计连续1的累计长度,遇到0则重置计数,示例输入输出如下:

  • 输入列表:[0, 0, 0, 0, 1, 1, 0, 0, 1]
  • 输出列表:[0, 0, 0, 0, 1, 2, 0, 0, 1]

你当前写的for循环加计数器的实现逻辑是完全正确的,如果要更紧凑的写法,可以参考下面两种常用方案:


方案1:标准库itertools.accumulate实现(无额外状态变量)

直接用Python标准库的累积计算函数,不需要手动维护计数器、也不需要手动append,核心逻辑仅需1行:

from itertools import accumulate

lst = [0, 0, 0, 0, 1, 1, 0, 0, 1]
new_lst = list(accumulate(lst, lambda pre, cur: pre + cur if cur else 0))

逻辑和你手写的循环完全一致:遍历过程中如果当前值是1,就把之前的累计计数加1;如果当前值是0,直接把累计值重置为0。这个写法没有额外的临时变量污染,属于函数式的实现风格。

方案2:海象运算符列表推导式(Python 3.8+,无依赖)

如果你的Python版本在3.8及以上,支持海象运算符:=,可以直接在列表推导里维护计数器状态,不需要导入任何库:

lst = [0, 0, 0, 0, 1, 1, 0, 0, 1]
count = 0
new_lst = [count := count + 1 if val else 0 for val in lst]

这个写法比原生for循环少了手动append的步骤,结构更紧凑,执行效率和原生循环基本一致。


选型建议

  • 你原本的for循环写法兼容性最好(支持所有Python版本)、可读性最高,生产环境用完全没问题
  • 如果要写工具脚本追求代码紧凑,优先选accumulate的方案,不需要额外初始化计数器变量
  • 如果不想导入标准库,且运行环境Python版本足够,海象运算符的列表推导是最方便的选择

内容的提问来源于stack exchange,提问作者Babbara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:09:56