如何按相邻元素差值规则拆分数字列表
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
相关产品推荐
相关产品推荐

