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

oeasy python 127集合运算 交集 并集 差集

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

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

回忆

  • 上次 学习了 冰封集合

    • 不能修改的 集合

    • 就是 冰封集合

可修改类型 不可修改类型
列表(list) 元组(tuple)
集合(set) 冰封集合(frozenset)
  • 集合 有啥运算 呢?🤔

回忆一下集合运算

  • 高中数学中有集合的运算

    • 交集

    • 并集

    • 差集

  • 需要先有 两个集合

基础

复制代码
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 的数字

  • 不要翻页

    • 把后面 独立完成吧!

交集运算

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

并集

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

  • 试一试

union

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

| union运算

  • |

    • 就是求并

    • 就是union运算

  • 可以连续运算吗?

连续运算

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

特殊情况

复制代码
s1 = {0}
s2 = {1}
s1 | s1 & s2
  • 运算结果
  • 可是 这个 如何理解?

    {0} & {1}

  • 不是应该得到空集吗?

运算优先级(precedence)

  • 运算符 有优先级

    • 就像 先乘除 后加减 一样
  • & 和 | 的优先级

    • 是不同的

      s1 = {0}
      s2 = {1}
      s1 | s1 & s2
      s1 | (s1 & s2)

  • 优先级

    • 先 &(交)

    • 后 |(并)

  • 如果我就想 先并后交 呢?

括号

复制代码
(s1 | s1) & s2
  • 有括号的要优先

    • 得到 空集
  • 还有啥运算?

差集运算

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

difference

  • 词根来自于拉丁

    • 后来成为古法语

      • 最后成为英语单词
  • di

    • 分开
  • ferre

    • 抚养的
  • difference

    • 分开抚养的

    • 不同

具体运算

复制代码
s1 = set(list(range(10))[::2])
s2 = set(list(range(10))[::3])
  • 代码

    s1.difference(s2)
    s2.difference(s1)

  • 效果

  • 差集获得
  • 差集 不影响 原集合

  • 差集 也有 运算符 吗?

运算符

复制代码
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 的对称差集

    • 这很对称

  • 可以有 运算符 吗?

符号^

  • 再试试
  • 可以把 对称差集

    • 理解成 或者 吗??

对称差集

复制代码
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 即可。

相关推荐
weixin_4407841134 分钟前
【HandlerThread实现原理】
android·java·开发语言
天空'之城36 分钟前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567881 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟1 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
迷迭香yy2 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
現実君2 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1232 小时前
SpringDAO的用法
java·开发语言·数据库
李昊哲小课4 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
格林威5 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
初级代码游戏6 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift