如何对比两个Python无序列表并找出列表b中新增的元素
列表重复元素对比解决方案
你需要的是支持保留重复元素计数的列表差异对比,普通集合差集会自动去重,无法匹配你的需求,以下是两种可直接运行的实现:
方案1:使用Python标准库collections.Counter(大数据量场景推荐)
Counter是Python内置的频次统计工具,支持直接对频次做差运算,无需安装第三方依赖:
from collections import Counter x = [1, 2, 3, 4, 5] b = [1, 1, 2, 3, 4, 5] # 统计两个列表的元素出现频次 count_x = Counter(x) count_b = Counter(b) # 计算频次差值,仅保留b中出现次数更多的元素 diff_counter = count_b - count_x # 展开为结果列表 result = list(diff_counter.elements()) print(result) # 输出:[1]
该方案时间复杂度为O(n+m)(n、m分别为两个列表的长度),性能远高于遍历删除方案。
方案2:无依赖手动遍历实现
如果不想引入任何导入模块,可以用复制列表+遍历校验的方式实现:
x = [1, 2, 3, 4, 5] b = [1, 1, 2, 3, 4, 5] x_copy = x.copy() result = [] for item in b: if item in x_copy: x_copy.remove(item) else: result.append(item) print(result) # 输出:[1]
该方案无需导入模块,适合短列表场景,长列表使用性能较低。
内容的提问来源于stack exchange,提问作者sunny9495
相关产品推荐
相关产品推荐

