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

如何按原有连续顺序对列表中多组相似项进行分组(最多3组)

连续重复子序列分组实现

针对你需要按顺序对列表中连续重复的子序列分组(最多合并3组)的需求,下面是Python的实现方案:

核心思路

  1. 遍历列表时,从当前位置开始检查后续是否存在重复的子序列,优先匹配更长的重复子序列,避免短序列拆分长重复序列。
  2. 最多识别3次连续重复的子序列,将其打包为[xN, 子序列元素...]的结构(N为重复次数)。
  3. 未找到重复的元素直接保留原形式。

代码实现

def group_repeated_subsequences(lst, max_repeats=3):
    result = []
    i = 0
    total_len = len(lst)
    while i < total_len:
        found_repeat = False
        # 计算当前位置能容纳的最大子序列长度(按最多max_repeats次重复算)
        max_sub_length = (total_len - i) // max_repeats
        # 从最长可能的子序列开始检查,优先匹配长重复序列
        for sub_length in range(max_sub_length, 0, -1):
            current_sub = lst[i:i+sub_length]
            repeat_count = 1
            next_pos = i + sub_length
            # 检查后续是否有重复的子序列,最多到max_repeats次
            while (next_pos + sub_length <= total_len 
                   and lst[next_pos:next_pos+sub_length] == current_sub 
                   and repeat_count < max_repeats):
                repeat_count += 1
                next_pos += sub_length
            # 找到重复次数≥2的子序列
            if repeat_count > 1:
                result.append([f"x{repeat_count}", *current_sub])
                i = next_pos
                found_repeat = True
                break
        # 无重复子序列,直接添加当前元素
        if not found_repeat:
            result.append(lst[i])
            i += 1
    return result

# 测试你的示例列表
my_list = ['blue', 'red', 'red', 'blue', 'green', 'red', 'blue', 'green', 'red', 'green', 'blue', 'green', 'blue', 'red']
processed_list = group_repeated_subsequences(my_list)
print(processed_list)

运行结果

输出与你期望的完全一致:

['blue', ['x2', 'red'], ['x2', 'blue', 'green', 'red'], ['x2', 'green', 'blue'], 'red']

调整说明

  • 如果需要修改最多合并的重复组数,只需修改函数参数max_repeats的值(比如设为4就可以最多合并4组重复子序列)。
  • 代码会自动优先匹配最长的重复子序列,避免出现短序列先匹配导致长重复序列被拆分的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:32