查找列表中连续正数块的起始和结束索引
找出列表中连续正数块的起止索引
这个需求其实很典型,核心就是在遍历过程中跟踪连续正数块的状态。我给你拆解一下思路,再附上可直接运行的Python代码:
核心思路
我们只需要维护两个状态变量:
start_idx:记录当前连续正数块的起始索引,没在块里时设为Nonein_block:标记是否正处于一个连续正数块中
遍历列表时按这几个逻辑处理:
- 遇到正数且不在块里:标记进入块,记录当前索引为起始位置
- 遇到非正数(这里是0)且正在块里:计算当前块的结束索引(当前索引-1),把起止索引对加入结果,然后重置状态
- 遍历结束后别忘了检查:如果列表末尾是正数,此时还处于块中,需要把最后这个块也加入结果
代码实现
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
相关产品推荐
相关产品推荐

