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