# Python 資料型別 - 集合

Jinku Hu 2023年1月30日

Info

## 建立集合

``````>>> x = {3, 5, 7, 2, 4, 5}
>>> print(x)		#prints the set variable
{2, 3, 4, 5, 7}
>>> print(type(x))		#checking type of x
<class 'set'>
``````

``````>>> x = {}
>>> print(type(x))
<class 'dict'>

>>> x = set()
>>> print(type(x))
<class 'set'>
``````

## 更新集合

``````>>> s = {2, 4}
>>> print(s)
{2, 4}

>>> print(s)
{2, 4, 6}

>>> s.update([2, 4, 6])
>>> print(s)
{2, 4, 6}

>>> s.update([5,6], {7, 8, 9})
>>> print(s)
{2, 4, 5, 6, 7, 8, 9}
``````

## 刪除集合中的元素

``````>>> s = {2, 4, 5, 6, 7, 8, 9}
>>> print(s)
{2, 4, 5, 6, 7, 8, 9}

>>> print(s)
{2, 4, 5, 7, 8, 9}

>>> s.remove(8)
>>> print(s)
{2, 4, 5, 7, 9}

>>> s.remove(8)			#generated an error
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
s.remove(8)
KeyError: 8
``````

``````>>> s = set("Python")
>>> s
{'o', 'n', 'h', 'P', 'y', 't'}
>>> s.pop()
o
>>> s.pop()
n
>>> s
{'h', 'P', 'y', 't'}
>>> s.clear()
>>> print(s)
set()
``````

`clear()` 方法是用來刪除集合中的所有元素。

``````>>> s = set("Python")
>>> s.clear()
>>> s
set()
``````

## 集合的操作

``````>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 10, 11, 12}
``````

### 並集

``````>>> print(x | y)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

#using union() method on x
>>> x.union(y)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
#union on y
>>> y.union(x)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
``````

### 交集

``````>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x & y)
{1, 2, 6}

#using intersection() method on x
>>> x.intersection(y)
{1, 2, 6}
#intersection on y
>>> y.intersection(x)
{1, 2, 6}
``````

### 差集

``````>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x - y)
{3, 4, 5}

#using difference() method on x
>>> x.difference(y)
{3, 4, 5}
#diference on y
>>> y.difference(x)
{8, 9, 7}
``````

### 對稱差集

``````>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x ^ y)
{3, 4, 5, 7, 8, 9}

#using symmetric_difference() method on x
>>> x.symmetric_difference(y)
{3, 4, 5, 7, 8, 9}
#symmetric_diference on y
>>> y.symmetric_difference(x)
{3, 4, 5, 7, 8, 9}
``````

## 集合方法

`add()` 增加一個元素到集合
`clear()` 清空整個集合
`copy()` 返回集合的拷貝（淺拷貝）
`difference()` 求差集
`difference_update()` 求差集並且將集合更新為該差集
`discard()` 從集合中刪除某一元素
`intersection()` 求交集
`intersection_update()` 求交集並且將集合更新為該交集
`isdisjoint()` 當兩個集合沒有交集時，返回 `True`
`issubset()` 當另外一個集合包含此集合時，返回 `True`
`issuperset()` 當該集合包含另外一個集合時，返回 `True`
`pop()` 從集合彈出一任意元素
`remove()` 從集合中刪除某一元素，假如集合中不存在該元素，報錯
`symmetric_difference()` 求對稱交集
`symmetric_difference_update()` 求對稱交集，並將該集合更新為此對稱交集
`union()` 求並集
`update()` 將集合更新為此集合和引數集合的並集

## 集合其他操作

### 集合成員檢查

``````>>> s = set("Blue")
>>> print('o' in s)
False
>>> print('l' in s)
True
``````

### 遍歷集合

``````>>> for i in set("Blue"):
print(i)

B
l
u
e
``````

## 適用於集合的內建函式

`all()` 如果集合中有所有元素為 `True` 返回 `True`，當集合為空時，返回 `True`
`any()` 如果集合中有一個元素為 `True` 返回 `True`，當集合為空時，返回 `False`
`enumerate()` 返回所有元素的索引和元素本身，索引和元素組成一個元組；最終返回的是一個 `enumerate` 型別
`len()` 返回集合中的元素數目或者集合的長度
`set()` 定義一個集合
`max()` 返回集合中元素的最大值
`min()` 返回集合中元素的最小值
`sorted()` 返回一個包含集合所有元素的排序列表
`sum()` 返回集合中所有元素的總和

## Python 不可變集合

• `copy()`
• `difference()`
• `intersection()`
• `isdisjoint()`
• `issubset()`
• `issuperset()`
• `symmetric_difference()`
• `union()`
``````>>> x = frozenset([2,6,3,9])
>>> y = frozenset([6,1,2,4])
>>> x.difference(y)
frozenset({9, 3})
``````

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景，但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。