『無為則無心』Python序列 — 22、Python集合及其常用操作
- 2021 年 7 月 7 日
- 筆記
- 測試基礎必會技能 - Python基礎
目錄
1、Python集合特點
- 集合可以對自己的元素去掉重複數據。
- 集合元素的展示順序和寫入順序不一致,所以集合元素是無序的,故集合也不支持下標。
- 集合是可變類型數據。
- 集合中只能存儲不可變對象。
2、Python集合的創建
創建集合使用{}
或set()
, 但是如果要創建空集合只能使用set()
,因為{}
用來創建空字典了。
# 1.創建有數據的集合
# 可以看到集合是無序的。
# 結果:{40, 10, 50, 20, 30}
s1 = {10, 20, 30, 40, 50}
print(s1)
# 2.創建一個有重複元素的集合
# 可以看到結果,集合有去重的功能。
# 結果:{40, 10, 50, 20, 30}
s2 = {10, 30, 20, 10, 30, 40, 30, 50}
print(s2)
# 3.把一個序列作為數據,創建一個集合
# 結果去重,且無序
# 結果:{'f', 'g', 'e', 'd', 'a', 'c', 'b'}
s3 = set('abcdefga')
print(s3)
# 結果:{'豬八戒', '孫悟空', '沙和尚', '唐僧'}
name_list = ['孫悟空','豬八戒','沙和尚','唐僧']
s4 = set(name_list)
print(s4)
# 4.使用set()方法創建一個空集合
s5 = set()
print(s5) # set()
print(type(s5)) # <class 'set'>
# 5.不能使用{}創建空集合,創建出來的是一個字典。
s6 = {}
print(s6) # {}
print(type(s6)) # <class 'dict'>
# 6.集合中只能存儲不可變對象。
# 結果:TypeError: unhashable type: 'list'
s = {[1,2,3],[4,6,7]}
# 存元組可以。不會報錯
# 結果:{(4, 6, 7), (1, 2, 3)}
s = {(1, 2, 3), (4, 6, 7)}
print(s)
# 7.使用set()將字典轉換為集合時,只會包含字典中的鍵
# 結果:{'c', 'a', 'b'}
s = set({'a': 1, 'b': 2, 'c': 3})
print(s)
3、操作集合常用API
(1)增加數據
@1、add()
方法
只能添加不可變類型數據,序列不行。
s1 = {10, 20}
# 1.向集合中添加元素
# 結果:{10, 20, 70}
s1.add(70)
# 2.集合有去重功能,向集合中添加重複元素,不和有任何操作。
# 結果:{10, 20, 70}
s1.add(10)
print(s1)
# 3.他通過add()方法,向集合中添加序列,會報錯
# 結果:TypeError: unhashable type: 'list'
print(s1)
s1.add([666, 888, 999])
因為集合有去重功能,所以,當向集合內追加的數據是當前集合已有數據的話,則不進行任何操作。
@2、update()
方法
update()
方法可以向集合中添加序列。
# 結果:{100, 10, 20, 200}
s1 = {10, 20}
s1.update([100, 200])
print(s1)
# 通過`update()`方法向集合添加基本類型數據,會拋異常。
# 結果:TypeError: 'int' object is not iterable
s1.update(100)
print(s1)
# update()可以傳遞字典作為參數,只會使用字典的鍵
# 結果:{100, 1000, 10, 20}
s1 = {10, 20}
s1.update({100: 'cd', 1000: 'ef'})
print(s1)
(2)刪除數據
@1、remove()
方法
remove()
方法,刪除集合中的指定數據,如果數據不存在則報錯。
# 1.刪除集合中指定元素
# 結果:{20, 30}
s1 = {10, 20, 30}
s1.remove(10)
print(s1)
# 2.刪除的元素不存在於集合中,則會報錯。
# 結果:KeyError: 40
s1.remove(40)
print(s1)
@2、discard()
方法
discard()
方法,刪除集合中的指定數據,如果數據不存在也不會報錯。
# 1.刪除集合中指定元素
# 結果:{20, 30}
s1 = {10, 20, 30}
s1.discard(10)
print(s1)
# 2.刪除的元素不存在於集合中,不會報錯。
# 結果:{10, 20, 30}
s1.discard(40)
print(s1)
@3、pop()
方法
pop()
方法,隨機刪除集合中的某個數據,並返回這個數據。
"""
輸出結果:
刪除的數據為: 40
{10, 50, 20, 30}
"""
s1 = {10, 20, 30, 40, 50}
del_num = s1.pop()
print('刪除的數據為:', del_num)
print(s1)
@4、claer()
方法
清空集合,用法同列表、字典。
"""
輸出結果:
清空前: {888, 666, 999}
清空後: set()
"""
name_set = {666, 888, 999}
print("清空前:", name_set)
name_set.clear()
print("清空後:", name_set)
(3)查找數據
你無法通過索引來查找集合中的數據。
in
:判斷數據在集合序列not in
:判斷數據不在集合序列
s1 = {10, 20, 30, 40, 50}
print(10 in s1) # True
print(10 not in s1) # False
print(100 in s1) # False
print(100 not in s1) # True
(4)copy()
複製
淺複製,同字典,具體說明請點擊查看字典的copy()
方法。
4、集合的運算
示例如下:
# 在對集合做運算時,不會影響原來的集合,而是返回一個運算結果。
# 創建兩個集合
s = {1,2,3,4,5}
s2 = {3,4,5,6,7}
# 1.& 交集運算
# 結果:{3, 4, 5}
result = s & s2
# 2.| 並集運算
# 結果:{1,2,3,4,5,6,7}
result = s | s2 #
# 3.- 差集:只在A集合里有的,B集合里沒有
# 結果:{1, 2}
result = s - s2
# 4.^ 異或集 獲取只在一個集合中出現的元素
# 就是兩個集合中不重疊的部分。
# 結果:{1, 2, 6, 7}
result = s ^ s2
# 5.<= 檢查一個集合是否是另一個集合的子集
# 如果a集合中的元素全部都在b集合中出現,
# 那麼a集合就是b集合的子集,b集合是a集合超集。
a = {1,2,3}
b = {1,2,3,4,5}
result = a <= b # True
result = {1,2,3} <= {1,2,3} # True
result = {1,2,3,4,5} <= {1,2,3} # False
# 6.< 檢查一個集合是否是另一個集合的真子集
# 如果超集b中含有子集a中所有元素,
# 並且b中還有a中沒有的元素,則b就是a的真超集,a是b的真子集。
result = {1,2,3} < {1,2,3} # False
result = {1,2,3} <= {1,2,3} # True
result = {1,2,3} < {1,2,3,4,5} # True
# >= 檢查一個集合是否是另一個的超集
# > 檢查一個集合是否是另一個的真超集
print('result =',result)