如何将连续重复元素的序列转换为分组子序列(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
相关产品推荐
相关产品推荐

