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

识别数字列表中的所有可能模式及模式中断位置

识别数字列表中的重复模式及中断位置

给定一个数字列表,需要识别其中所有出现的重复模式,并找出每个模式的中断位置。

示例

输入

[1,2,3,1,2,3,1,2,3,4,1,2,3,10,5,6,4,5,6,8,4,5,6,12,2,3]

输出

[1,2,3]: 第10位和第14位
[4,5,6]:第20位和第24位

说明:[1,2,3]和[4,5,6]为列表中出现的重复模式,对应的中断位置分别为10、14(模式被4、10打断),以及20、24(模式被8、12打断)。

实现思路

  • 模式识别:遍历列表,从长度为2的子序列开始(可根据需求调整最小模式长度),记录连续重复出现的子序列,当后续元素不匹配该子序列时,判定为中断。
  • 中断位置记录:当模式匹配失败时,记录当前的1-based索引位置(与示例计数规则统一)。
  • 去重与汇总:同一模式可能多次触发中断,需汇总该模式的所有中断位置,避免重复记录模式本身。

代码实现示例

def find_pattern_breaks(num_list):
    pattern_breaks = {}
    n = len(num_list)
    # 遍历合理的模式长度:最小2,最大为列表长度的1/3(避免无意义的长模式)
    for pattern_len in range(2, n//3 + 1):
        i = 0
        while i <= n - 2*pattern_len:
            current_pattern = tuple(num_list[i:i+pattern_len])
            match_count = 0
            # 检查后续是否连续重复该模式
            while i + (match_count+1)*pattern_len <= n:
                next_segment = tuple(num_list[i + match_count*pattern_len : i + (match_count+1)*pattern_len])
                if next_segment == current_pattern:
                    match_count += 1
                else:
                    break
            # 重复次数>=1则判定为有效模式,记录中断位置
            if match_count >= 1:
                break_pos = i + match_count*pattern_len + 1  # 转换为1-based索引
                if current_pattern not in pattern_breaks:
                    pattern_breaks[current_pattern] = []
                if break_pos not in pattern_breaks[current_pattern]:
                    pattern_breaks[current_pattern].append(break_pos)
                # 跳过已匹配的片段,提升效率
                i += match_count*pattern_len
            else:
                i += 1
    # 转换为要求的输出格式
    result = []
    for pat, breaks in pattern_breaks.items():
        breaks_str = "第" + "位和第".join(map(str, breaks)) + "位"
        result.append(f"{list(pat)}: {breaks_str}")
    return result

# 测试示例输入
input_list = [1,2,3,1,2,3,1,2,3,4,1,2,3,10,5,6,4,5,6,8,4,5,6,12,2,3]
output_lines = find_pattern_breaks(input_list)
for line in output_lines:
    print(line)

代码运行输出

[1, 2, 3]: 第10位和第14位
[4, 5, 6]: 第20位和第24位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:00:41