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

Python如何从列表中提取差值为1的连续元素组成子列表

问题分析&代码修改

原有代码存在3个核心错误:

  1. 变量名不统一:定义的子列表变量为sub_list,但实际追加元素时误用了sub_array,属于笔误
  2. 索引逻辑错误:内层循环ii从i起始时,第一次判断就访问了lst[ii-1],如果i=0会直接取到列表最后一位元素,逻辑完全错位
  3. 重复遍历逻辑:外层循环每次i自增后都会重新扫描后续元素,导致生成大量重复的短子序列,例如扫完[3,4,5]后,又会从4、5起始重新扫描得到[4,5]、[5]这类多余结果

修正后代码

lst = [1, 3, 4, 5, 8, 10, 14, 20, 21, 22, 23, 40, 47, 48] 
final_list = []
if not lst:  # 处理空列表边界情况
    print(final_list)
    exit()
sub_list = [lst[0]]
for num in lst[1:]:
    if num - sub_list[-1] == 1:
        sub_list.append(num)
    else:
        # 只保留长度>=2的连续序列,符合输出要求
        if len(sub_list) >= 2:
            final_list.append(sub_list)
        sub_list = [num]
# 不要漏掉遍历结束后最后一个子序列的判断
if len(sub_list) >= 2:
    final_list.append(sub_list)
print(final_list)

运行输出:

[[3, 4, 5], [20, 21, 22, 23], [47, 48]]

逻辑说明

  • 全程只遍历列表1次,时间复杂度O(n),没有重复扫描
  • 每次判断当前元素和当前子序列最后一个元素的差值,差值为1就追加,否则就结算当前子序列
  • 只有长度>=2的连续子序列才会被加入最终结果,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:00