Python中如何将含重复元素的列表拆分为无重复元素的子列表
解决Python列表拆分问题
给定列表 my_list = ['1','2','2','3','3','3','4','4','5'],我们需要将其拆分为由子列表构成的新列表,要求每个子列表内部无重复元素,最终得到输出 [['1','2','3','4','5'],['2','3','4'],['3']]。这里提供两种实用的解决思路:
方法一:基于元素出现次数构建子列表
先统计每个元素的出现次数,再按照最大出现次数循环,每次收集仍有剩余次数的元素,直到所有元素的计数耗尽:
from collections import Counter my_list = ['1','2','2','3','3','3','4','4','5'] element_counts = Counter(my_list) max_occurrences = max(element_counts.values()) result = [] for _ in range(max_occurrences): current_sublist = [] for num in element_counts: if element_counts[num] > 0: current_sublist.append(num) element_counts[num] -= 1 if current_sublist: result.append(current_sublist) print(result)
这种方法的核心是利用Counter快速统计元素频率,再按频率分配元素到各个子列表,逻辑清晰且效率较高。
方法二:迭代筛选并移除元素
另一种直观的思路是,每次从原列表中提取去重后的元素作为子列表,然后从原列表中移除这些元素的一次出现,重复操作直到原列表为空:
my_list = ['1','2','2','3','3','3','4','4','5'] result = [] while my_list: # 保留原顺序的去重元素作为当前子列表 current_sublist = list(dict.fromkeys(my_list)) result.append(current_sublist) # 移除每个元素的一次出现 for num in current_sublist: my_list.remove(num) print(result)
这种方法不需要额外的统计工具,直接通过迭代修改原列表实现需求,适合对基础操作更熟悉的场景。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

