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

如何合并存在元素偏移的多组时间序列列表为完整列表?

合并时间序列快照列表:自动识别重叠并扩展序列

针对时间序列快照的合并需求,核心是找到相邻快照的最长重叠子序列(前一个的后缀与后一个的前缀),然后拼接非重叠的新增部分,既保留序列顺序,也支持重复元素。

实现思路

  1. 对每一对快照列表,从两个列表中较短的长度开始倒序检查,找到最长的匹配后缀/前缀
  2. 合并时保留前一个列表的全部内容,追加后一个列表中重叠部分之后的元素
  3. 多快照场景下迭代合并:先合并前两个,结果再与下一个快照合并,直到处理完所有列表

代码实现(Python)

def merge_snapshots(l1, l2):
    max_overlap = 0
    # 从最大可能的重叠长度开始检查,确保找到最长匹配
    max_possible = min(len(l1), len(l2))
    for overlap_len in range(max_possible, 0, -1):
        if l1[-overlap_len:] == l2[:overlap_len]:
            max_overlap = overlap_len
            break
    # 拼接非重叠部分
    return l1 + l2[max_overlap:]

# 处理多快照列表组
def merge_multiple_snapshots(snapshots):
    if not snapshots:
        return []
    merged = snapshots[0]
    for snap in snapshots[1:]:
        merged = merge_snapshots(merged, snap)
    return merged

测试示例

示例1:无重复元素的快照组

snapshots = [[1,2,3,4], [2,3,4,5], [5,6,7,8], [7,8,9,10]]
print(merge_multiple_snapshots(snapshots))
# 输出: [1,2,3,4,5,6,7,8,9,10]

示例2:含重复元素的快照

l1 = [1,2,3,4,5,5,6,7,8]
l2 = [4,5,5,6,7,8,9,10,11]
print(merge_snapshots(l1, l2))
# 输出: [1,2,3,4,5,5,6,7,8,9,10,11]

注意事项

  • 若快照间无重叠(断档),函数会直接拼接两个列表,保留完整的时间片段
  • 优先匹配最长重叠,避免因短重叠导致的错误合并(比如重复元素场景下,不会误判单个重复元素为重叠终点)
  • 严格保留元素顺序和重复元素,完全符合时间序列快照的特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:13:18