Python实现:将列表拆分为连续重复元素子列表并保留原始顺序
解决连续相同元素分组的问题
没问题,你这个需求本质就是按连续出现的相同元素进行分组,最后那个单独的1因为和前面的1不连续,自然会被拆成独立的组,刚好符合你的要求。下面给你两种实现方案:
方案一:手动遍历实现(直观易懂)
这种方式适合理解分组的底层逻辑,一步步控制分组过程:
N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1] N2 = [] # 处理空列表的边界情况(可选,根据你的实际场景调整) if not N: print(N2) else: # 初始化第一个分组 current_group = [N[0]] # 从第二个元素开始遍历 for num in N[1:]: # 如果当前元素和分组内的元素相同,就加入分组 if num == current_group[0]: current_group.append(num) # 否则把当前分组存入结果,重新创建新分组 else: N2.append(current_group) current_group = [num] # 别忘了把最后一个分组加入结果 N2.append(current_group) print(N2) # 输出结果:[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5], [1]]
方案二:用itertools.groupby实现(简洁高效)
Python内置的itertools.groupby工具专门用来处理连续相同元素的分组,一行列表推导式就能搞定:
from itertools import groupby N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1] # 把groupby返回的迭代器转为列表,得到分组结果 N2 = [list(group) for key, group in groupby(N)] print(N2) # 输出结果和上面完全一致
小说明
- 手动遍历的方式适合新手理解分组逻辑,也方便你在需要的时候自定义分组规则(比如加入额外判断);
groupby是更Pythonic的写法,代码简洁且效率高,日常开发中推荐使用。
内容的提问来源于stack exchange,提问作者listener
相关产品推荐
相关产品推荐

