Skip to content

Latest commit

 

History

History
421 lines (279 loc) · 7.21 KB

File metadata and controls

421 lines (279 loc) · 7.21 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0127
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

集合运算

回忆

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

图片描述

  • 集合 有啥运算 呢?🤔

图片描述

回忆一下集合运算

  • 高中数学中有集合的运算
    • 交集
    • 并集
    • 差集

图片描述

  • 需要先有 两个集合

基础

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 即可。