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

如何将连续重复元素的序列转换为分组子序列(list of list)

如何将连续相同元素的列表分组为子列表集合

问题描述

给定如下列表:

['A',
 'A',
 'A',
 'A',
 'A',
 'A',
 'A',
 'D',
 'D',
 'D',
 'D',
 'D',
 'D',
 'A',
 'A',
 'A',
 'A',
 'A',
 'D',
 'D',
 'D',
 'D',
 'D',
 'D']

需要将连续相同的元素分组为子列表,最终得到如下形式的结果:

[['A',
 'A',
 'A',
 'A',
 'A',
 'A',
 'A'], 
 ['D',
 'D',
 'D',
 'D',
 'D',
 'D'],
 ['A',
 'A',
 'A',
 'A',
 'A'], 
 ['D',
 'D',
 'D',
 'D', 'D', 'D']]

具体要求:按连续相同元素分组,每一组连续的相同元素作为一个子列表,依次处理直到所有元素分组完成。


解决方案

方法一:手动遍历分组(适合理解底层逻辑)

通过手动维护当前分组,逐个判断元素是否属于当前组:

original_list = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'D', 'D', 'D', 'D', 'D', 'D', 'A', 'A', 'A', 'A', 'A', 'D', 'D', 'D', 'D', 'D', 'D']
result = []

if not original_list:
    print(result)

current_group = [original_list[0]]
for item in original_list[1:]:
    # 当前元素和组内元素相同则加入
    if item == current_group[0]:
        current_group.append(item)
    # 不同则将当前组存入结果,创建新组
    else:
        result.append(current_group)
        current_group = [item]
# 最后别忘了把剩余的分组加入结果
result.append(current_group)

print(result)

方法二:使用itertools.groupby(简洁高效)

Python标准库的itertools.groupby专门处理连续相同元素的分组场景,一行代码即可完成:

from itertools import groupby

original_list = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'D', 'D', 'D', 'D', 'D', 'D', 'A', 'A', 'A', 'A', 'A', 'D', 'D', 'D', 'D', 'D', 'D']
result = [list(group) for key, group in groupby(original_list)]

print(result)

groupby会把连续相同的元素聚合成迭代器,只需将每个迭代器转为列表,就能得到目标分组结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:50:25