Python3如何按唯一元素数量将列表拆分为多个子列表?
几种Python3实现方法
嘿,这个需求很容易实现,我给你分享两种实用的解决方案,都能达到你想要的效果:
方法一:利用itertools.groupby(最简洁高效)
因为你的原列表已经是按相同元素连续排列的,Python标准库中的itertools.groupby刚好能完美处理这种场景,它会把连续的相同元素自动分组,分组数量也恰好等于原列表中唯一元素的数量。
代码示例:
from itertools import groupby original_list = [10,10,10,20,20,20,20,30,40,40,40] result = [list(group) for key, group in groupby(original_list)] print(result) # 输出: [[10,10,10],[20,20,20,20],[30],[40,40,40]]
简单解释:groupby会遍历列表,把连续相同的元素聚合成一个迭代器,我们只需要把每个迭代器转换成列表,就能直接得到目标结果。如果你的原列表不是连续排列的相同元素,也可以先排序再用这个方法,不过你的例子里已经是有序的,直接用就好。
方法二:手动遍历实现(适合理解原理)
如果你不想依赖标准库,也可以自己写遍历逻辑,手动维护当前分组:
original_list = [10,10,10,20,20,20,20,30,40,40,40] if not original_list: result = [] else: result = [] current_num = original_list[0] current_group = [current_num] for num in original_list[1:]: if num == current_num: current_group.append(num) else: result.append(current_group) current_num = num current_group = [num] # 别忘了把最后一个组加入结果 result.append(current_group) print(result) # 输出同样符合预期
简单解释:我们先把第一个元素作为当前分组的基准,然后遍历剩下的元素——和当前基准相同就加入当前组,不同就把当前组存入结果列表,再重新开始新的分组,最后记得把最后一个分组也加入结果即可。
内容的提问来源于stack exchange,提问作者gerousdan
相关产品推荐
相关产品推荐

