# Python的集合類型舉例分析
## 一、集合類型概述
Python中的集合(Set)是一種無序、可變且不包含重復元素的數據結構。它基于數學中的集合概念實現,提供了高效的成員檢測和集合運算功能。集合類型在Python中通過`set`和`frozenset`兩個內置類實現,其中:
- `set`:可變集合,創建后可增刪元素
- `frozenset`:不可變集合,創建后不可修改
## 二、集合的創建與基本操作
### 1. 集合創建
```python
# 空集合必須用set()創建
empty_set = set()
# 非空集合的創建方式
nums = {1, 2, 3} # 直接使用花括號
chars = set('hello') # 從可迭代對象創建
frozen = frozenset([1, 2, 2, 3]) # 不可變集合
# 添加元素
nums.add(4) # {1, 2, 3, 4}
nums.update([5,6]) # {1, 2, 3, 4, 5, 6}
# 刪除元素
nums.remove(3) # 移除存在的元素
nums.discard(10) # 安全移除(不存在不報錯)
popped = nums.pop()# 隨機移除一個元素
# 集合長度
print(len(nums)) # 輸出當前元素數量
A = {1, 2, 3}
B = {3, 4, 5}
# 并集
union = A | B # {1, 2, 3, 4, 5}
union = A.union(B) # 等效方法
# 交集
intersect = A & B # {3}
intersect = A.intersection(B)
# 差集
diff = A - B # {1, 2}
diff = A.difference(B)
# 對稱差集(僅在其中一個集合中)
sym_diff = A ^ B # {1, 2, 4, 5}
sym_diff = A.symmetric_difference(B)
X = {1, 2}
Y = {1, 2, 3}
# 子集判斷
print(X <= Y) # True (X是Y的子集)
print(X.issubset(Y))
# 超集判斷
print(Y >= X) # True (Y是X的超集)
print(Y.issuperset(X))
# 不相交判斷
print(X.isdisjoint({4,5})) # True
# 列表去重高效方案
duplicates = [1, 2, 2, 3, 4, 4]
unique = list(set(duplicates)) # [1, 2, 3, 4]
# 比列表檢測更高效
vocab = {'apple', 'banana', 'orange'}
print('pear' in vocab) # O(1)時間復雜度
# 找出兩個列表的交集
customers_A = {'Alice', 'Bob', 'Charlie'}
customers_B = {'Bob', 'David', 'Eve'}
common = customers_A & custmers_B # {'Bob'}
特性 | 列表(List) | 元組(Tuple) | 字典(Dict) | 集合(Set) |
---|---|---|---|---|
有序性 | 是 | 是 | 是(Python3.7+) | 否 |
可變性 | 是 | 否 | 是 | 是(set)/否(frozenset) |
元素唯一性 | 否 | 否 | 鍵唯一 | 是 |
典型用途 | 有序序列存儲 | 不可變數據 | 鍵值對存儲 | 去重/集合運算 |
# 類似列表推導式
squares = {x**2 for x in range(5)} # {0, 1, 4, 9, 16}
# 不可哈希元素不能作為集合元素
invalid_set = {[1,2], [3,4]} # TypeError
# 集合本身不可哈希(frozenset可以)
valid_dict = {frozenset({1,2}): "value"}
Python的集合類型提供了強大的數據操作能力,特別適合需要快速成員檢測、數據去重或數學集合運算的場景。通過合理使用集合,可以顯著提升代碼的簡潔性和執行效率。在實際開發中,建議: 1. 優先考慮集合處理去重需求 2. 對頻繁的成員檢測使用集合替代列表 3. 注意集合的無序特性不適合需要保持順序的場景 4. 根據需求選擇set或frozenset “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。