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

Python如何获取列表/序列/数据框中连续0/1区间首尾索引及对应值

实现方案

直接使用Numpy的差分运算即可快速实现,无需手动遍历序列,代码简洁且执行效率高:

import numpy as np

# 原有数据生成逻辑
x = np.arange(0,4*np.pi,0.1)  
y = np.sin(x)
# 原列表推导可替换为向量化运算,效率更高
limit = np.where((y > -0.25) & (y < 0.25), 1, 0)

# 核心逻辑:查找连续1的起止索引
# 计算差分,补0处理首尾边界场景
diff = np.diff(limit, prepend=0, append=0)
# 0转1的位置就是连续1的起始索引
start_indices = np.where(diff == 1)[0]
# 1转0的位置往前挪1位,就是连续1的结束索引
end_indices = np.where(diff == -1)[0] - 1

# 获取对应x值
start_x = x[start_indices]
end_x = x[end_indices]

# 遍历输出结果
for s_idx, e_idx, s_x, e_x in zip(start_indices, end_indices, start_x, end_x):
    print(f"起始索引:{s_idx},对应x值:{s_x:.2f} | 结束索引:{e_idx},对应x值:{e_x:.2f}")

补充说明

  • 运行上述代码可以得到示例中第一个区间的起止索引为29、33,和绘图代码里的垂直线位置完全匹配,符合需求。
  • 如果需要取每个连续区间的偏移位置值,比如取第3个位置的x,直接用x[start_indices + 2]即可。
  • 如果你使用的Numpy版本低于1.16不支持prepend/append参数,可以把差分逻辑替换为:diff = np.concatenate([[0], np.diff(limit), [0]]),效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:06