首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >oeasy Python 102 集合_运算_交集_并集_差集_对称差集

oeasy Python 102 集合_运算_交集_并集_差集_对称差集

原创
作者头像
oeasy
发布2026-07-15 22:19:33
发布2026-07-15 22:19:33
630
举报

  • 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。

集合_运算_交集_并集_差集_对称差集

回忆

  • 上次 学习了 冰封集合
    • 不能修改的 集合
    • 就是 冰封集合

可修改类型

不可修改类型

列表(list)

元组(tuple)

集合(set)

冰封集合(frozenset)

  • 集合 有啥运算 呢?🤔

回忆一下集合运算

  • 高中数学中有集合的运算
    • 交集
    • 并集
    • 差集
  • 需要先有 两个集合

基础

代码语言:javascript
复制
l = list(range(10))
l
s1 = set(l[::2])
s2 = set(l[::3])
  • 两个集合
    • s1 十以内 能被2整除的 数
    • s2 十以内 能被3整除的 数
  • 集合分布
  • 看看交集

集合的交集 intersection

  • 交集
    • 两个集合 都有的元素
    • 构成的 集合
  • 中间的 共有部分
    • intersection
      • 既在s1 这个section
      • 又在s2 这个section
  • 看看效果

intersection

  • 交集方法 不会影响 两个列表本身
  • 交集运算 有运算符 吗?

交集运算

  • 交集运算符 &
  • 效果与intersection函数一样
    • 都是求交集

孙子算经

  • 说有这么一个数字
    • 三个三个数 余二
    • 五个五个数 余三
    • 七个七个数 余二
  • 问这个数是多少?

被 三整除 余二

  • 这样我们就得到了所有被三整除余 2 的数字
  • 不要翻页
    • 把后面 独立完成吧!

交集运算

代码语言:javascript
复制
l = list(range(100))
s1 = set(l[2::3])
s2 = set(l[3::5])
s3 = set(l[2::7])
s1 & s2 & s3
  • 运行结果
  • 观察答案
  • 交集之后是并集

并集

  • union 指的是联合
  • 把两个集合和到一起
  • 试一试

union

代码语言:javascript
复制
l = list(range(10))
l
s1 = set(l[::2])
s2 = set(l[::3])
s1.union(s2)
  • 运行结果
  • 两个集合的并集
  • 并集运算 不会 影响原列表
  • 可以并集 有 运算符 吗?

| union运算

  • |
    • 就是求并
    • 就是union运算
  • 可以连续运算吗?

连续运算

代码语言:javascript
复制
s1 = {1}
s2 = {1, 2}
s3 = {1, 2, 3}
  • 开始运算
  • 一般都是 从左往右计算 的

特殊情况

代码语言:javascript
复制
s1 = {0}
s2 = {1}
s1 | s1 & s2
  • 运算结果
  • 可是 这个 如何理解?
代码语言:javascript
复制
{0} & {1}
  • 不是应该得到空集吗?

运算优先级(precedence)

  • 运算符 有优先级
    • 就像 先乘除 后加减 一样
  • & 和 | 的优先级
    • 是不同的
代码语言:javascript
复制
s1 = {0}
s2 = {1}
s1 | s1 & s2
s1 | (s1 & s2)
  • 优先级
    • 先 &(交)
    • 后 |(并)
  • 如果我就想 先并后交 呢?

括号

代码语言:javascript
复制
(s1 | s1) & s2
  • 有括号的要优先
    • 得到 空集
  • 还有啥运算?

差集运算

代码语言:javascript
复制
help(set.difference)
  • 新运算 差值运算
  • 如何理解difference?

difference

  • 词根来自于拉丁
    • 后来成为古法语
      • 最后成为英语单词
  • di
    • 分开
  • ferre
    • 抚养的
  • difference
    • 分开抚养的
    • 不同

具体运算

代码语言:javascript
复制
s1 = set(list(range(10))[::2])
s2 = set(list(range(10))[::3])
  • 代码
代码语言:javascript
复制
s1.difference(s2)
s2.difference(s1)
  • 效果
  • 差集获得
  • 差集 不影响 原集合
  • 差集 也有 运算符 吗?

运算符

代码语言:javascript
复制
s1 - s2
s2 - s1
  • 既然可以从s1 中刨除 s2
  • 就可以从s2 中刨除 s1
  • 得到的差集(difference)
  • 这俩有点对称
    • s1 - s2
    • s2 - s1
  • 不过 还不算 真对称

对称差

  • 有一种 symmetric_difference
  • 什么意思?
  • symmetric [sɪ'metrɪk]
    • symmetry [ˈsɪmətri]
    • syn-
      • 同步的
      • 一起的
    • *me
      • 度量
        • measure 测量
        • meter 测量装置
        • month 计算月份
    • 一起度量
      • 对称
  • symmetric_difference
    • 对称差集

对称差集

  • 具体计算

对称

  • 对称差集 中的 元素
    • 要么 在 这个集合
    • 要么 在 那个集合
    • 不同时 在两个集合
    • 像 逻辑运算中的 异或
  • 如何理解对称呢?
  • s1对于s2的对称差集
    • 就是s2 对于 s1 的对称差集
    • 这很对称
  • 可以有 运算符 吗?

符号^

  • 再试试
  • 可以把 对称差集
    • 理解成 或者 吗??

对称差集

代码语言:javascript
复制
s1 = set(list(range(10))[::2])
s2 = set(list(range(10))[::3])
s1 & s2 
s1 | s2
s1 | s2 - s1 & s2
(s1 | s2) - (s1 & s2)
(s1 - s2) | (s2 - s1)
  • 注意运算的时候要加括号
  • 对称差集本质上是
    • 并集减去交集

总结

  • 这次学习了集合的运算
  • 集合总共四种运算

运算名称

方法名

运算符

交集

intersection

&

并集

union

\

差集

difference

-

对称差集

symmetric_difference

^

  • 这些运算可以做增强赋值吗?🤔
    • 就像 i += 1那样
  • 下次再说 👋
  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集合_运算_交集_并集_差集_对称差集
  • 回忆
    • 回忆一下集合运算
    • 基础
    • 集合的交集 intersection
    • intersection
    • 交集运算
    • 孙子算经
    • 被 三整除 余二
    • 交集运算
    • 并集
    • union
    • | union运算
    • 连续运算
    • 特殊情况
    • 运算优先级(precedence)
    • 括号
    • 差集运算
    • difference
    • 具体运算
    • 运算符
    • 对称差
    • 对称差集
    • 对称
    • 符号^
    • 对称差集
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档