[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瀏覽器模擬