Kotlin实现相邻同类型元素分组并保序的优化方案问询
高效实现相邻同类型元素分组(保留原顺序)
需求与示例
需要对列表元素进行分组,仅将相邻的同类型元素归为一组,同时严格保留原有顺序。
输入示例:
A A B A A A A C C A
输出示例:
A A B A A A A C C A
提问:是否存在比手写简单for循环更高效的实现方式?
解决方案
当然有,Python标准库中的itertools.groupby就是这类场景的最优解之一。
itertools.groupby是专门为相邻重复元素分组设计的工具,底层由C实现,性能远优于纯Python手写的for循环,处理大规模数据时优势会更明显。
具体实现代码
from itertools import groupby # 输入列表示例 input_list = ['A', 'A', 'B', 'A', 'A', 'A', 'A', 'C', 'C', 'A'] # 执行分组操作,将每组转换为列表 groups = [list(group) for key, group in groupby(input_list)] # 按示例格式输出结果 for group in groups: print(' '.join(group))
关键说明
groupby会遍历可迭代对象,自动将连续相同的元素归为一组,返回(分组键值, 组元素迭代器)的元组。- 若处理的是自定义对象这类无法直接比较的元素,可通过
key参数指定分组依据,比如groupby(input_list, key=lambda x: x.category)。
内容的提问来源于stack exchange,提问作者kkkkk
相关产品推荐
相关产品推荐

