You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对包含重复元素的两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:36:00