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

不使用for循环提取布尔列表中True值的起止范围 支持pandas Series

连续True区间提取方案

普通Python布尔列表单行实现

基于itertools.groupby实现,不需要额外写循环逻辑:

from itertools import groupby
x = [False, True, True, True, True, False, True, True, False, True]
result = [[start, start + len(list(group)) - 1] for start, group in groupby(range(len(x)), key=lambda idx: x[idx]) if x[start]]

逻辑说明:对索引序列按对应位置的布尔值分组,筛选出布尔值为True的分组,取分组首个索引作为区间起点,起点加分组长度减1作为区间终点。

pandas Series 适配方案

针对pandas布尔 Series 可以直接用内置的分组方法,数据量越大性能优势越明显:

import pandas as pd
s = pd.Series([False, True, True, True, True, False, True, True, False, True])
result = s[s].groupby((~s).cumsum()).apply(lambda g: [g.index[0], g.index[-1]]).tolist()

逻辑说明:先过滤出所有值为True的行,再通过布尔值取反后的累计和做分组标识(连续的True会被分到同一组),每个分组取首尾索引即可得到区间。

两种方案运行后得到的结果都是[[1,4], [6,7], [9,9]],符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:48:01