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

查找列表中连续正数块的起始和结束索引

找出列表中连续正数块的起止索引

这个需求其实很典型,核心就是在遍历过程中跟踪连续正数块的状态。我给你拆解一下思路,再附上可直接运行的Python代码:

核心思路

我们只需要维护两个状态变量:

  • start_idx:记录当前连续正数块的起始索引,没在块里时设为None
  • in_block:标记是否正处于一个连续正数块中

遍历列表时按这几个逻辑处理:

  1. 遇到正数且不在块里:标记进入块,记录当前索引为起始位置
  2. 遇到非正数(这里是0)且正在块里:计算当前块的结束索引(当前索引-1),把起止索引对加入结果,然后重置状态
  3. 遍历结束后别忘了检查:如果列表末尾是正数,此时还处于块中,需要把最后这个块也加入结果

代码实现

cross = [7,5,8,0,0,0,0,2,5,8,0,0,0,0,8,7,9,3,0,0,0,3,2,1,4,5,0,0,0,7,5]
result = []
start_idx = None
in_block = False

for idx, num in enumerate(cross):
    if num > 0:
        if not in_block:
            # 开启新的正数块
            start_idx = idx
            in_block = True
    else:
        if in_block:
            # 结束当前正数块,记录起止索引
            result.append((start_idx, idx - 1))
            in_block = False

# 处理列表末尾的正数块(避免遍历结束后遗漏)
if in_block:
    result.append((start_idx, len(cross) - 1))

print(result)

运行这段代码后,输出正好是你想要的:

[(0, 2), (7, 9), (14, 17), (21, 25), (29, 30)]

扩展说明

如果你的列表里可能出现负数(而不仅仅是0),只需要保持判断条件num > 0即可(毕竟需求是找正数块),整个逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:01:02