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

Python中如何查找列表中首个连续+1递增序列的起始索引

问题描述

给定一个步长不固定的递增列表,要求找到第一个开始仅以+1为步长持续递增的元素的索引,约束条件为列表一旦进入+1步长递增状态就会一直保持,也可能全程不存在该区间。
示例输入:
[ 0, 4, 6, 8, 12, 15, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
示例输出:8,对应起始元素为23。

现有实现的问题

你当前使用的实现存在漏洞:

for (a,b) in zip(l, l[1:]):
    if b-a == 1:
        print(l.index(a))
        break

如果列表中存在重复元素,l.index(a)会返回该元素第一次出现的索引,而非当前遍历位置的索引,会得到错误结果。

更简洁优雅的实现方案

方案1:迭代器写法(最简洁)

时间复杂度O(n),无额外空间开销,不存在符合条件的区间时自动返回None:

res = next((i for i, (a, b) in enumerate(zip(l, l[1:])) if b - a == 1), None)
print(res)

说明:直接用enumerate同步获取索引,完全规避了index()方法的漏洞,同时用生成器表达式+next()的组合实现了找到第一个符合条件的结果就停止遍历的逻辑,和需求完全匹配。

方案2:兼容传统循环写法

如果需要更易读的分支逻辑,可简化为如下写法:

for i, (a, b) in enumerate(zip(l, l[1:])):
    if b - a == 1:
        print(i)
        break
else:
    print(None) # 没有符合条件的区间时的兜底处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:03