Python求两个list的交集、并集、差(补)集、对称差集的方法

  • 摘要
  • 1. 总结
    • 1.1 求两个list的交、并、差(补)、对称差集 - 使用set集合运算符
    • 1.2 求两个list的交、并、差(补)、对称差集 - 使用set集合的方法 - 高效率
  • 2.求两list的交集 - 不同实现方式
  • 3.求两个list的并集 - 不同实现方式
  • 4.求两个list的差(补)集 - 不同实现方式
  • 5.求两个list的对称差集 - 不同实现方式

摘要

本文主要介绍在Python下求两个list的交集、并集、差(补)集、对称差集的方法。首先,总结了实现上述功能主要的两种方法:1.使用set集合运算符2.使用set集合的方法(推荐第2种方法);接着,依次对同一功能的不同种实现方式罗列出具体例子(不限于上述两种方法)。

1. 总结

1.1 求两个list的交、并、差(补)、对称差集 - 使用set集合运算符

输入:

a = [0,1,2,3,4]
b = [0,2,6]
list(set(a) & set(b))   # 使用  "&"  运算求a与b的交集,输出:[0, 2]
list(set(a) | set(b))   # 使用  "|"  运算求a与b的并集,输出:[0, 1, 2, 3, 4, 6]
list(set(b) - set(a))   # 使用  "-"  运算求a与b的差(补)集: 求b中有而a中没有的元素,输出:[6]
list(set(a) - set(b))   # 使用  "-"  运算求a与b的差(补)集: 求a中有而b中没有的元素,输出:[1, 3, 4]
list(set(a) ^ set(b))   # 使用  "^"  运算求a与b的对称差集,输出:[1, 3, 4, 6]

输出:

求交集:     list(set(a) & set(b))  输出 ->  [0, 2]
求并集:     list(set(a) | set(b))  输出 ->  [0, 1, 2, 3, 4, 6]
求差(补)集: list(set(b) - set(a))  输出 ->  [6]
求差(补)集: list(set(a) - set(b))  输出 ->  [1, 3, 4]
求对称差集: list(set(a) ^ set(b))  输出 ->  [1, 3, 4, 6]

1.2 求两个list的交、并、差(补)、对称差集 - 使用set集合的方法 - 高效率

输入:

a = [0,1,2,3,4]
b = [0,2,6]
list(set(a).intersection(set(b)))  # 使用 intersection 求a与b的交集,输出:[0, 2]
list(set(a).union(b))              # 使用 union 求a与b的并集,输出:[0, 1, 2, 3, 4, 6]
list(set(b).difference(set(a)))    # 使用 difference 求a与b的差(补)集:求b中有而a中没有的元素,输出: [6]
list(set(a).difference(set(b)))    # 使用 difference 求a与b的差(补)集:求a中有而b中没有的元素,输出:[1, 3, 4]
list(set(a).symmetric_difference(b))   # 使用 symmetric_difference 求a与b的对称差集,输出:[1, 3, 4, 6]

输出:

求交集:list(set(a).intersection(set(b))          输出 --> [0, 2]
求并集:list(set(a).union(b))                     输出 --> [0, 1, 2, 3, 4, 6]
求差(补)集: list(set(b).difference(set(a))       输出 --> [6]
求差(补)集: list(set(a).difference(set(b)))      输出 --> [1, 3, 4]
求对称差集: list(set(a).symmetric_difference(b)) 输出 --> [1, 3, 4, 6]

2.求两list的交集 - 不同实现方式

输入:

"""以a、b为实验对象"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 intersection 求a与b的交集"""
c1 = list(set(a).intersection(set(b)))
print('c1 -->', c1)  #输出:c1 --> [0, 2]"""方法2:在list里使用循环 求a与b的交集  - 不推荐使用"""
c2 = [c_i for c_i in a if c_i in b]
print('c2 -->', c2)  #输出:c2 --> [0, 2]"""方法3:使用 "&" 运算 求a与b的交集"""
c3 = list(set(a) & set(b))
print('c3 -->', c3)  #输出:c3 --> [0, 2]"""方法4:使用 append 求a与b的交集  - 不推荐使用"""
c4 = []
for a_i in a:if a_i in b:c4.append(a_i)
print('c4 -->', c4)  # 输出:c4 --> [0, 2]

输出:

c1 --> [0, 2]
c2 --> [0, 2]
c3 --> [0, 2]
c4 --> [0, 2]

3.求两个list的并集 - 不同实现方式

输入:

"""以a、b为实验对象"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 union 求a与b的并集"""
c1 = list(set(a).union(set(b)))
print('c1 -->', c1)    # 输出c1 --> [0, 1, 2, 3, 4, 6]"""方法2:使用 "|" 求a与b的并集"""
c2 = list(set(a) | set(b))
print('c2 -->', c2)    # 输出c2 --> [0, 1, 2, 3, 4, 6]"""方法3:使用 append 求a与b的并集  - 不推荐使用"""
import copy
c3 = copy.deepcopy(a)
for b_i in set(b):if b_i not in set(a):c3.append(b_i)
print('c3 -->', c3)  # 输出c3 --> [0, 1, 2, 3, 4, 6]

输出:

c1 --> [0, 1, 2, 3, 4, 6]
c2 --> [0, 1, 2, 3, 4, 6]
c3 --> [0, 1, 2, 3, 4, 6]

4.求两个list的差(补)集 - 不同实现方式

输入:

"""以a、b为实验对象"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 difference 求a与b的差(补)集"""
c1 = list(set(b).difference(set(a)))  # 求b中有而a中没有的元素
c2 = list(set(a).difference(set(b))) # 求a中有而b中没有的元素
print('c1 -->', c1)    # 输出c1 --> [6]
print('c2 -->', c2)    # 输出c2 --> [1, 3, 4]"""方法2:使用 "-" 求a与b的差(补)集"""
c3 = list(set(b) - set(a))   # 求b中有而a中没有的
c4 = list(set(a) - set(b))   # 求a中有而b中没有的
print('c3 -->', c3)    # 输出c3 --> [6]
print('c4 -->', c4)    # 输出c4 --> [1, 3, 4]

输出:

c1 --> [6]
c2 --> [1, 3, 4]
c3 --> [6]
c4 --> [1, 3, 4]

5.求两个list的对称差集 - 不同实现方式

对称差集:只属于其中一个集合,而不属于另一个集合的元素组成的集合(求不同时属于两集合的元素组成的集合)

输入:

"""以a、b为实验对象"""
a = [0,1,2,3,4]
b = [0,2,6]
"""方法1:使用 symmetric_difference 求对称差集"""
c1 = list(set(a).symmetric_difference(set(b)))  """c1 与 c2 的结果一样"""
print('c1 -->', c1)   """输出c1 --> [1, 3, 4, 6]"""c2 = list(set(b).symmetric_difference(set(a)))  """c1 与 c2 的结果一样"""
print('c2 -->', c2)   """输出c2 --> {1, 3, 4, 6}""""""方法2:使用 "^" 求对称差集"""
c3 = list(set(a) ^ set(b))
print('c3 -->', c3)   """输出c3 --> {1, 3, 4, 6}"""

输出:

c1 --> [1, 3, 4, 6]
c2 --> [1, 3, 4, 6]
c3 --> [1, 3, 4, 6]

延伸博客:Python求多个list的交集、并集、差(补)集的方法

Python求两个list的交集、并集、差(补)集、对称差集的方法相关推荐

  1. Python求两个list的交集、并集、补集、对称差集的两种方法

    1.使用set集合运算符 a = [0,1,2,3,4] b = [3,4,5,6,7,8,9] list(set(a) & set(b)) # 使用 "&" 运算 ...

  2. js寻找两个数组的差集_js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  3. python求两个列表的并集.交集.差集方法

    求两个列表的差集 >>> a = [1,2,3] >>> b=[1,2] >>> ################################ ...

  4. C/C++ 求两个集合的交集、并集、差集

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610 1.题目:求两个集合的交集.并集.差集 1.1代码 #include <iostream> #include & ...

  5. java 时间段求并集,java集合操作-----求两个集合的交集和并集

    2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...

  6. Java求两个数组的交集、差集、并集

    目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...

  7. Java实验——定义一个类,该类中包含以下几个方法(静态):实现两个字符串数组的逆序排序,输出结果为字符串数组;求两个整形数组的交集;求两个浮点型数组的并集;

    目录 一.实现两个字符串数组的逆序排序,输出结果为字符串数组 解题思路: 具体代码: 运行截图: 二.求两个整形数组的交集 具体代码: 运行截图: 三.求两个浮点型数组的并集 解题思路: 具体代码: ...

  8. java集合操作-----求两个集合的交集和并集

    java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...

  9. 求两个数组的交集和并集

    晚上闲来无事,想起前两天查资料时候,看到别人一篇博客标题关于数组的交集和并集,晚上也随便写写,权当督促自己坚持经常练习练习写写小Demo.如下,先来一段求有序数组的交集的代码,代码如下: public ...

最新文章

  1. 对某课程的建议和意见_2021年河南专升本专科专业对照和考试课程征求意见
  2. 高效sql性能优化极简教程
  3. Hugo快速搭建Blog
  4. 解决 Android java.lang.RuntimeException: Stub!
  5. 【机器学习基础】Python数据预处理:彻底理解标准化和归一化
  6. 查看显卡显存_3d渲染需要多大显存比较合适?显存在渲染中的作用
  7. android使用apache http包链接servlet
  8. RTMP代理的协议规范(RtmpProxy)
  9. elasticsearch-1.7.1 集群搭建
  10. 个人开发—进度记录(二)
  11. 浅谈前端JavaScript编程风格
  12. 服务器接口文档详细 接口文档模板 规范 完整
  13. 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合
  14. python投票问题,程序列出在python中获得多数投票的候选人
  15. Python爬取网页图片
  16. 编写程序,生成一种贯穿10×10字符数组(初始时全为字符‘.‘)的“随机步法”。
  17. shopex mysql 数据库服务器_win2003以isapi的方式配置php+mysql环境(安装了shopEX) 毕竟我是杨小飞i...
  18. 网页开发工具有哪些?——开发者必备的15个Web开发工具
  19. 【精品软件】WeGo(微博PPC客户端) Release Note (更新至v1.05 Build20110117)
  20. 异步四位二进制计数器逻辑图

热门文章

  1. 解锁iPhone密码的三种方法
  2. 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
  3. 阿里云发送短信验证码失败
  4. 涨薪 30 % 以上,看这篇万字干货就行(留言点赞抽奖)
  5. 从广交会,看懂海尔智家逆势增长的秘密
  6. 运营电影网站的一点个人心得
  7. mpvue小程序云开发 + 富文本editor
  8. java调用acrobat_PDF模板报表导出(Java+Acrobat+itext)
  9. 让你的网页引入思源字体
  10. Android十岁了,它是如何逆袭成全球最多人用的手机系统的?