集合(set)
1. 什麼是集合
集合是容器型數據類型,將{}作爲容器標誌裏面多個元素用逗號隔開: {元素1, 元素2, 元素3,…}
可變的(支持增刪改)、無序的(不支持下標操作)
集合中的元素: 不可變的,唯一的(自帶去重)
# 1.空集合
# 注意: {}表示空字典
x = {}
print(type(x)) # <class 'dict'>
# set1是一個空集合
set1 = set()
# 2.集合中的元素
set2 = {1, 2, 'hus', (10, 2)}
print(set2)
# 集合中的元素不可變
# set3 = {[1, 2], 2, 'hus'} # TypeError: unhashable type: 'list'
# 集合中的元素是唯一的
set4 = {1, 2, 'hus', 1}
print(set4) # {1, 2, 'hus'}
2. 元素的增刪改查
2.1 查 - 獲取集合中的元素
集合只能通過遍歷一個一個得取出所有的元素,沒有辦法單獨取出指定的一個元素
set5 = {23, 3, 5, 67, 8}
for x in set5:
print(x)
2.2 增 - 添加元素
- 集合.add(元素) - 在集合中添加指定元素
- 集合.update(序列) - 將序列中的元素全部添加到集合中
set5 = {23, 3, 5, 67, 8}
set5.add(100)
print(set5) # {67, 3, 5, 100, 8, 23}
# 將字符串中的字符全部添加到集合中
set5.update('abc')
print(set5) # {67, 3, 5, 100, 8, 'b', 'a', 23, 'c'}
# 將字典中所有的key添加到集合中
set5.update({'name': '小明', 'age': 18})
print(set5) # {67, 3, 5, 100, 'age', 8, 'b', 'name', 'a', 23, 'c'}
2.3 刪 - 刪除元素
- 集合.remove(元素) - 刪除集合中指定元素,元素不存在報錯
- 集合.discard(元素) - 刪除集合中指定元素, 元素不存在不報錯
set5 = {67, 3, 5, 100, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.remove(100)
print(set5) # {67, 3, 5, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.discard(67)
print(set5) # {3, 5, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.discard(1000) # 不會報錯
3. 相關操作
3.1 in 和 not in
集合的 in 和 not in 判斷的是元素是否存在
set5 = {23, 3, 5, 67, 8}
print(8 in set5)
3.2 len 和 set 函數
- len(集合) - 獲取集合中 元素的個數
- set(序列) - 將指定的序列轉換成集合(如果序列是字典是將字典的key作爲集合的元素)
list1 = [10, 23, 10, 25, 30, 12, 23]
list1 = list(set(list1))
print(list1) # [10, 12, 23, 25, 30]
4. 數學集合運算
集合支持數學中的集合運算:並集(|), 交集(&), 差集(-), 對稱差集(^), >/<(包含關係)
-
並集: 集合1 | 集合2 - 將兩個集合合併在一起產生一個新的集合
-
交集: 集合1 & 集合2 - 獲取兩個集合的公共部分產生一個新的集合
-
差集:集合1 - 集合2 - 獲取集合1中去掉集合2剩下的部分
-
對稱差集:集合1 ^ 集合2 - 獲取集合1和集合2合併後去掉公共部分剩下的部分
-
集合1 > 集合2 - 判斷集合1中是否包含集合2
集合1 < 集合2 - 判斷集合2中是否包含集合1
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8}
# 1)並集: 集合1 | 集合2 -> 將兩個集合合併在一起產生一個新的集合
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
# 1)並集: 集合1 | 集合2 -> 將兩個集合合併在一起產生一個新的集合
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
# 3)差集: 集合1 - 集合2 -> 獲取集合1中去掉集合2剩下的部分
print(set1 - set2) # {1, 2, 3}
print(set2 - set1) # {8, 7}
# 4)對稱差集:集合1 ^ 集合2 -> 獲取集合1和集合2合併後去掉公共部分剩下的部分
print(set1 ^ set2) # {1, 2, 3, 7, 8}
# 5) 集合1 > 集合2 - 判斷集合1中是否包含集合2
# 集合1 < 集合2 - 判斷集合2中是否包含集合1
set3 = {5, 6, 7, 8, 9}
set4 = {1, 2}
print(set3 > set4) # False
print(set3 > {5, 6}) # True
print(set3 > {5, 6, 1}) # False