如何对包含重复元素的两个Python列表做减法求差集
带重复元素的Python列表差集实现
此处的差集需要保留元素的重复计数差异,不能直接使用Python内置的
set类型运算,set会自动去重,无法匹配预期结果。
方案1:使用collections.Counter(最简洁)
通过Counter统计两个列表的元素出现次数,直接做差后展开为列表即可:
from collections import Counter super_set_list = [1,1,2,3,3,4,4,4,5,6,7,8,9] sub_set_list = [1,2,3,3,4,4,6,7,9] # 计数做差后展开 diff_counter = Counter(super_set_list) - Counter(sub_set_list) diff = list(diff_counter.elements())
执行后diff的结果即为[1,4,5,8],符合预期。Python 3.7及以上版本会保留元素在超集中的出现顺序。
方案2:手动计数(无导入依赖、兼容性强)
如果不想导入内置模块,或者需要严格保证差集元素和超集出现顺序一致,可以手动统计计数实现:
super_set_list = [1,1,2,3,3,4,4,4,5,6,7,8,9] sub_set_list = [1,2,3,3,4,4,6,7,9] # 先统计子集元素的出现次数 sub_count = {} for num in sub_set_list: sub_count[num] = sub_count.get(num, 0) + 1 diff = [] # 遍历超集生成差集 for num in super_set_list: if sub_count.get(num, 0) > 0: sub_count[num] -= 1 else: diff.append(num)
执行后得到的diff同样为预期结果[1,4,5,8]。
内容的提问来源于stack exchange,提问作者tkxgoogle
相关产品推荐
相关产品推荐

