一、前言
在 Python 編程中,集合(set
)是一種非常實用的數據結構,它能夠存儲一組無序且不重復的元素。集合廣泛應用于數據去重、交并差運算等場景。
本文將重點講解 Python 中集合的創建方式,包括使用大括號 {}
、set()
函數、從其他序列轉換等多種方法,并通過豐富的代碼示例幫助你掌握其用法。
二、什么是集合?
? 定義:
集合是 Python 中的一種可變數據類型,表示為 set
,用于存儲無序且不重復的元素集合。
?? 特點:
- 元素不可重復
- 無索引,不能通過下標訪問
- 支持數學集合操作(如并集、交集、差集)
- 可動態添加或刪除元素
三、Python 集合的創建方式
? 1. 使用大括號?{}
?創建集合
s = {1, 2, 3, 4}
print(s) # 輸出: {1, 2, 3, 4}
?? 注意事項:
- 空集合不能用?
{}
,這會創建一個空字典(dict
)!
empty_dict = {} # 空字典
empty_set = set() # 空集合
? 2. 使用?set()
?函數創建集合
這是最常用的方式之一,尤其適用于將其他序列(如列表、字符串、元組)轉換為集合。
示例:
# 從列表轉集合
s1 = set([1, 2, 3, 2])
print(s1) # 輸出: {1, 2, 3}# 從字符串轉集合
s2 = set("hello")
print(s2) # 輸出: {'h', 'e', 'l', 'o'}# 從元組轉集合
s3 = set((1, 2, 3, 2))
print(s3) # 輸出: {1, 2, 3}
? 3. 使用推導式創建集合(Set Comprehension)
類似于列表推導式,集合也支持推導式語法,用于快速生成集合。
示例:
# 生成 0~9 的平方集合
squares = {x**2 for x in range(10)}
print(squares)
# 輸出: {0, 1, 64, 4, 36, 9, 16, 49, 25, 81}
? 4. 從其他集合創建新集合
你可以通過復制、合并等方式創建新的集合。
示例:
a = {1, 2, 3}
b = set(a) # 復制集合 a
c = a.copy() # 同樣復制print(b) # 輸出: {1, 2, 3}
print(c) # 輸出: {1, 2, 3}
? 5. 使用集合運算創建新集合
可以通過集合運算符或方法來創建新的集合。
a = {1, 2, 3}
b = {3, 4, 5}# 并集
union_set = a | b
print(union_set) # 輸出: {1, 2, 3, 4, 5}# 交集
intersection_set = a & b
print(intersection_set) # 輸出: {3}
四、創建集合時的常見問題與注意事項
場景 | 建議 |
---|---|
是否可以包含列表? | ? 不可以,集合中的元素必須是不可變類型(如數字、字符串、元組) |
是否可以嵌套集合? | ? 不允許直接嵌套普通集合(可用?frozenset ?替代) |
如何判斷是否為空集合? | ? 使用?not s ?或?len(s) == 0 |
創建集合時順序是否保留? | ? 集合是無序的,輸出順序可能不同 |
五、集合與其他數據結構的對比(創建方式)
類型 | 創建方式 | 示例 | 是否可變 | 是否允許重復 |
---|---|---|---|---|
列表(list ) | [] ?/?list() | [1, 2, 3] | ? 是 | ? 允許 |
元組(tuple ) | () ?/?tuple() | (1, 2, 3) | ? 否 | ? 允許 |
字典(dict ) | {} ?/?dict() | {'a': 1, 'b': 2} | ? 是(值可變) | ? 鍵不允許重復 |
集合(set ) | set() ?/?{} | {1, 2, 3} | ? 是 | ? 不允許重復 |
六、實際應用示例
? 示例1:去除列表中的重復項
nums = [1, 2, 2, 3, 4, 4, 5]
unique_nums = list(set(nums))
print(unique_nums) # 輸出: [1, 2, 3, 4, 5](順序可能變化)
?? 注意:如果需要保留原始順序,應避免使用
set()
直接轉換。
? 示例2:從字符串提取唯一字符
text = "hello world"
unique_chars = set(text.replace(" ", ""))
print(unique_chars)
# 輸出: {'w', 'r', 'd', 'l', 'o', 'h', 'e'}
? 示例3:用戶標簽去重統計
user1_tags = ["python", "web", "data"]
user2_tags = ["java", "web", "mobile"]all_tags = set(user1_tags + user2_tags)
print(all_tags)
# 輸出: {'python', 'web', 'data', 'java', 'mobile'}
七、凍結集合(frozenset)
如果你希望創建一個不可變的集合,可以使用 frozenset()
。
fs = frozenset([1, 2, 3])
print(fs) # 輸出: frozenset({1, 2, 3})
fs.add(4) # 報錯:AttributeError: 'frozenset' object has no attribute 'add'
? 優勢:
- 可作為字典的鍵
- 可作為其他集合的元素
八、總結對比表:集合的創建方式
創建方式 | 語法 | 是否推薦 | 說明 |
---|---|---|---|
使用?{} | {1, 2, 3} | ? 推薦 | 快速創建非空集合 |
使用?set() | set([1, 2, 3]) | ? 推薦 | 更通用,適用于任何可迭代對象 |
集合推導式 | {x**2 for x in range(10)} | ? 推薦 | 快速構造集合 |
從已有集合復制 | set(a) ?/?a.copy() | ? 推薦 | 安全地復制集合 |
使用集合運算 | `a | b/ a.union(b)` | ? 推薦 |
凍結集合 | frozenset([1, 2, 3]) | ? 推薦 | 創建不可變集合 |
九、結語
感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!