You need to enable JavaScript to run this app. 如何统计布尔列表中被False分隔的连续True分组长度并返回列表
优惠活动
大模型
产品
解决方案
定价
更多

如何统计布尔列表中被False分隔的连续True分组长度并返回列表

布尔列表连续True分组计数方案

以下方案时间复杂度均为O(n),适配不同规模的列表需求:

方案1:基于itertools.groupby实现

你之前用groupby没得到预期结果,大概率是没有对分组的键做过滤,只需要筛选键为True的分组统计长度即可:

from itertools import groupby

bool_list = [False, True, True, True, False, False, True, True, True, True, True, False, True, True, True, True, True, True, True, False]
result = [len(list(group)) for key, group in groupby(bool_list) if key]
# 输出结果:[3, 5, 7]

方案2:原生Python遍历实现

无需导入任何依赖,性能稳定,适合所有场景:

bool_list = [False, True, True, True, False, False, True, True, True, True, True, False, True, True, True, True, True, True, True, False]
count = 0
result = []
for val in bool_list:
    if val:
        count += 1
    else:
        if count > 0:
            result.append(count)
            count = 0
# 兼容列表末尾为True的场景
if count > 0:
    result.append(count)
# 输出结果:[3, 5, 7]

方案3:Numpy向量化实现(适合超大规模列表)

如果你的布尔列表长度在十万级以上,用numpy的向量化运算可以大幅提升处理速度:

import numpy as np

bool_list = [False, True, True, True, False, False, True, True, True, True, True, False, True, True, True, True, True, True, True, False]
arr = np.array(bool_list, dtype=bool)
# 补首尾边界后计算差分,定位连续True的起止位置
diff_arr = np.diff(np.concatenate(([False], arr, [False])))
start_pos = np.where(diff_arr == 1)[0]
end_pos = np.where(diff_arr == -1)[0]
result = (end_pos - start_pos).tolist()
# 输出结果:[3, 5, 7]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:15:05