[TOC]
## 集合概念和定义:
### 概念
由一个或多个确定的元素所构成的整体叫做集合。
集合本身是无序的,不可以为集合创建索引或执行切片操作,也没有键可用来获取集合中的值。
集合有两种不同类型:可变集合(set)和不可变集合(frozenset).
对于可变集合,可以添加和删除元素;对于不可变集合只能读取元素,不能进行修改
### 集合中的元素特征:
1. 确定性(元素必须可hash)
2. 互异性(去重)
3. 无序性(集合中的元素没有先后之分)
>注意:集合存在的意义就在于去重和关系运算
### 集合的定义
使用一对大括号来定义集合,如`s={1,2,3,4,5,6,7}`
#### 定义可变集合
* 方法1
`s={1,2,3,4,5,6,7}`
* 方法2
`s=set({1,3,2})`
#### 定义不可变集合
```python
>>> s=frozenset({1,2,4,3})
>>> s
frozenset({1, 2, 3, 4})
```
## 集合的常规操作
### 创建集合
创建集合的时候,就可以看出来集合的无序性和去重性
```python
>>> s={6,4,5,'h','e','l','l','o'}
>>> s
{'o', 4, 5, 6, 'l', 'h', 'e'}
```
### 增加值到集合
* add增加单个
```python
>>> s={6,4,5,3}
>>> s.add('A')
>>> s.add('BC')
>>> s
{3, 4, 5, 6, 'A', 'BC'}
```
* update增加多个
```python
>>> s.update(['你们','好','呀'])
>>> s
{3, 4, 5, 6, '好', '你们', '呀'}
```
### 删除集合元素
* pop随机删除
如何集合为空,用pop随机删除就会报错
```python
>>> s={3}
>>> s.pop()
3
>>> s.pop() #集合空,删除报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'pop from an empty set'
```
* remove指定删除
如果要删除的元素不存会报错
```python
>>> s={3, 4, 5, 6, '好', '你们', '呀'}
>>> s.remove('好')
>>> s.remove('好')
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: '好'
```
* discard指定删除
如果要删除的元素不存在也不会报错
```python
>>> s={3, 4, 5, 6, '好', '你们', '呀'}
>>> s.discard('好')
>>> s.discard('好')
```
### 复制和清空
* clear清空集合
```python
>>> s={3, 4, 5, 6, '好', '你们', '呀'}
>>> s.clear()
>>> s
set()
```
* copy复制集合
```python
>>> s={3, 4, 5, 6, '好', '你们', '呀'}
>>> s2=s.copy()
>>> s2
{'呀', 3, 4, 5, 6, '你们', '好'}
```
## 集合的关系运算
### 集合的交集
交集使用`&`符号或`intersection`函数来表示
```python
>>> l= {'张三','李四','noah'}
>>> p = {'张三','李四','luo'}
>>> l&p
{'李四', '张三'}
>>> l.intersection(p)
{'李四', '张三'}
```
### 结合的并集
并集使用`|`或`union`函数来表示
```python
>>> l= {'张三','李四','noah'}
>>> p = {'张三','李四','luo'}
>>> l|p
{'noah', 'luo', '李四', '张三'}
>>> l.union(p)
{'noah', 'luo', '李四', '张三'}
```
### 集合的差集
差集使用`-`或`difference`函数来表示
```python
>>> l= {'张三','李四','noah'}
>>> p = {'张三','李四','luo'}
>>> l.difference(p)
{'noah'}
>>> l-p
{'noah'}
```
### 集合的对称差集
对称差集使用`^`或`.symmetric_difference`函数来表示
```python
>>> l= {'张三','李四','noah'}
>>> p = {'张三','李四','luo'}
>>> l^p
{'luo', 'noah'}
>>> l.symmetric_difference(p)
{'luo', 'noah'}
```
### 判断某元素是否在集合内
使用`in`,`not in`判断某个元素是否在集合中
```python
>>> l= {'张三','李四','noah'}
>>> 'noah' in l
True
>>> 'noah' not in l
False
```
## 集合间的关系
两个集合之间一般有三种关系,相等、相交、包含。
### 判断两个集合是否相等
使用`==`,`!=`判断两个集合是否相等
```python
>>> l= {'张三','李四','noah'}
>>> p= {'张三','李四','noah'}
>>> l == p
True
>>> l != p
...
False
>>> l != p
False
```
### 判断两个集合是否不相交
使用`isdisjoint`函数判断是否不相交,相交则返回`false`,不相交返回`ture`
```python
>>> l= {'张三','李四','noah'}
>>> p= {'张三','李四','luo'}
>>> q= {1,2,3}
>>> l.isdisjoint(p)
False
>>> l.isdisjoint(q)
True
```
### 判断两个集合是否包含
`issuperset`判断集合是不是包含其他集合,等同于a>=b
`issubset`判断集合是不是被其他集合包含,等同于a<=b
```python
>>> l= {'张三','李四','noah'}
>>> p= {'张三','李四'}
>>> l.issuperset(p)
True
>>> p.issubset(l)
True
```
- 基础部分
- 基础知识
- 变量
- 数据类型
- 数字与布尔详解
- 列表详解list
- 字符串详解str
- 元组详解tup
- 字典详解dict
- 集合详解set
- 运算符
- 流程控制与循环
- 字符编码
- 编的小程序
- 三级菜单
- 斐波那契数列
- 汉诺塔
- 文件操作
- 函数相关
- 函数基础知识
- 函数进阶知识
- lambda与map-filter-reduce
- 装饰器知识
- 生成器和迭代器
- 琢磨的小技巧
- 通过operator函数将字符串转换回运算符
- 目录规范
- 异常处理
- 常用模块
- 模块和包相关概念
- 绝对导入&相对导入
- pip使用第三方源
- time&datetime模块
- random随机数模块
- os 系统交互模块
- sys系统模块
- shutil复制&打包模块
- json&pickle&shelve模块
- xml序列化模块
- configparser配置模块
- hashlib哈希模块
- subprocess命令模块
- 日志logging模块基础
- 日志logging模块进阶
- 日志重复输出问题
- re正则表达式模块
- struct字节处理模块
- abc抽象类与多态模块
- requests与urllib网络访问模块
- 参数控制模块1-optparse-过时
- 参数控制模块2-argparse
- pymysql数据库模块
- requests网络请求模块
- 面向对象
- 面向对象相关概念
- 类与对象基础操作
- 继承-派生和组合
- 抽象类与接口
- 多态与鸭子类型
- 封装-隐藏与扩展性
- 绑定方法与非绑定方法
- 反射-字符串映射属性
- 类相关内置方法
- 元类自定义及单例模式
- 面向对象的软件开发
- 网络-并发编程
- 网络编程SOCKET
- socket简介和入门
- socket代码实例
- 粘包及粘包解决办法
- 基于UDP协议的socket
- 文件传输程序实战
- socketserver并发模块
- 多进程multiprocessing模块
- 进程理论知识
- 多进程与守护进程
- 锁-信号量-事件
- 队列与生产消费模型
- 进程池Pool
- 多线程threading模块
- 进程理论和GIL锁
- 死锁与递归锁
- 多线程与守护线程
- 定时器-条件-队列
- 线程池与进程池(新方法)
- 协程与IO模型
- 协程理论知识
- gevent与greenlet模块
- 5种网络IO模型
- 非阻塞与多路复用IO实现
- 带着目标学python
- Pycharm基本使用
- 爬虫
- 案例-爬mzitu美女
- 案例-爬小说
- beautifulsoup解析模块
- etree中的xpath解析模块
- 反爬对抗-普通验证码
- 反爬对抗-session登录
- 反爬对抗-代理池
- 爬虫技巧-线程池
- 爬虫对抗-图片懒加载
- selenium浏览器模拟