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

Python实现两个独立列表的共有值查找与非共有元素提取

问题目标

给定两个独立列表,完成以下操作得到新列表:

  1. 查找同时存在于两个列表中的公共元素
  2. 将这些公共元素从两个原列表中分别移除
  3. 汇总两个列表过滤后剩余的所有元素,生成最终结果列表

示例

输入

a = [
    "DJI_0229.jpg",
    "DJI_0232.jpg",
    "DJI_0233.jpg",
    "DJI_0235.jpg"
]
b = [
    "DJI_0229.jpg",
    "DJI_0232.jpg",
    "DJI_0233.jpg",
    "DJI_0230.jpg",
    "DJI_0231.jpg",
    "DJI_0234.jpg"
]

期望输出

[
    "DJI_0230.jpg",
    "DJI_0231.jpg",
    "DJI_0234.jpg",
    "DJI_0235.jpg"
]
实现方案

核心逻辑是先通过集合运算快速拿到两个列表的公共元素,再分别过滤两个列表后合并结果,时间效率远高于双层循环遍历。

Python 实现代码

def merge_list_remove_common(list1, list2):
    # 取两个列表的公共元素集合
    common = set(list1).intersection(set(list2))
    # 过滤掉两个列表里的公共元素
    res1 = [x for x in list1 if x not in common]
    res2 = [x for x in list2 if x not in common]
    # 合并后按文件名排序可完全匹配示例输出顺序
    return sorted(res1 + res2)

# 测试用例运行
a = [
    "DJI_0229.jpg",
    "DJI_0232.jpg",
    "DJI_0233.jpg",
    "DJI_0235.jpg"
]
b = [
    "DJI_0229.jpg",
    "DJI_0232.jpg",
    "DJI_0233.jpg",
    "DJI_0230.jpg",
    "DJI_0231.jpg",
    "DJI_0234.jpg"
]
print(merge_list_remove_common(a, b))

运行上述代码会输出和示例完全一致的结果:

['DJI_0230.jpg', 'DJI_0231.jpg', 'DJI_0234.jpg', 'DJI_0235.jpg']

说明

  • 用集合取交集的方式判断公共元素,单元素查询时间复杂度为O(1),处理大列表时性能优势明显
  • 如果不需要对结果排序,去掉sorted()即可保留元素在原列表中的相对顺序
  • 该逻辑不会移除单个列表内部的重复元素,只会剔除两个列表共有的元素

内容的提问来源于stack exchange,提问作者Vas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:09:19