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

如何按相邻元素差值规则拆分数字列表

Python实现方案

基础遍历实现(无额外依赖)

实现逻辑

  • 先处理原列表为空的边界场景
  • 初始化结果存储列表和当前连续子序列,将列表第一个元素作为当前子序列的初始值
  • 从第二个元素开始遍历,判断当前元素与当前子序列末尾元素的差值是否为1:
    • 差值为1则将元素追加到当前子序列
    • 差值不为1则将当前子序列存入结果列表,重置当前子序列为仅包含当前元素
  • 遍历完成后将最后一个子序列存入结果列表
  • 按索引从结果列表取出对应子序列赋值给b、c、d即可

代码示例

a = [1, 2, 3, 4, 10, 11, 12, 44, 45, 46, 47]

if not a:
    res = []
else:
    res = []
    current_sub = [a[0]]
    for num in a[1:]:
        if num - current_sub[-1] == 1:
            current_sub.append(num)
        else:
            res.append(current_sub)
            current_sub = [num]
    res.append(current_sub)

b, c, d = res

输出验证

print(b) # 输出:[1, 2, 3, 4]
print(c) # 输出:[10, 11, 12]
print(d) # 输出:[44, 45, 46, 47]

简洁写法(基于itertools.groupby)

利用连续差1的元素索引值-元素值恒定的特性,通过分组函数直接拆分:

from itertools import groupby

a = [1, 2, 3, 4, 10, 11, 12, 44, 45, 46, 47]
res = [list(g) for _, g in groupby(enumerate(a), key=lambda x: x[0] - x[1])]
b, c, d = res

该写法适配所有边界场景,代码量更少。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:05