【Rollo的Python之路】Python:集合學習筆記 Set
集合
一個無序的,不重復的序列。
1.0 無序代表無法索引
2.0 不重復代表可以用來對元素去重
3.0 元素可哈希的,列表不可以,字典的value不能set
只能用set,或者大括號{} 創建。
basket1 = set("abcEfghjpkgabc") basket2 = set("1235646ghj123652") print(basket1) print(basket2) #執行結果: {‘k‘, ‘g‘, ‘E‘, ‘c‘, ‘f‘, ‘a‘, ‘p‘, ‘b‘, ‘h‘, ‘j‘} {‘g‘, ‘3‘, ‘6‘, ‘2‘, ‘5‘, ‘1‘, ‘h‘, ‘j‘, ‘4‘}
去重:
computer_brand = {"apple","dell","Hp","lenov","apple"} print(computer_brand) #執行結果: {‘dell‘, ‘apple‘, ‘Hp‘, ‘lenov‘}
set本身是一個不可以哈希的,所以不能做為dict的key
set 可以為:可變集合與不可變集合(frozenset).
訪問集合:in,not in,判斷一個元素是否在集合裏面
用for語句去取值。
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a= set(num1) b = set(num2) print(a) print(b) print(2 in a) print(4 in b) #執行結果: {1, 2, 3, 4, 5, 6} {5, 6, 7, 8, 9, 10} True False
set 更新:set.add,set.update
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.add("u") print(a) a.add("uu") print(a)#執行結果: {1, 2, 3, 4, 5, 6, ‘u‘} {1, 2, 3, 4, 5, 6, ‘u‘, ‘uu‘}
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.update("opsok") #update會把裏面的元素分開處理,add只是當一個整體 print(a) #執行結果: {‘o‘, 1, 2, 3, 4, 5, 6, ‘k‘, ‘p‘, ‘s‘}
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.update(["opsok",123]) print(a) #執行結果: {1, 2, 3, 4, 5, 6, ‘opsok‘, 123}
set.remove(),只能一次remove一個元素。
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.remove(4) print(a) #執行結果: {1, 2, 3, 5, 6}
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.pop() #隨機刪除 print(a) #執行結果: {2, 3, 4, 5, 6}
set.clear
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.clear() #清空 print(a) #執行結果: set()
del.set 刪除
set.copy
集合運算
1.0 交集:set.intersection(set1, set2 ... etc),共同有的 符號:"a&b"
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) c = {4,5,6,12,25,13,8,9,10} print(a.intersection(b,c)) #執行結果: {5, 6}
2.0 並集:set.union(set1, set2...),所有集合有的全在一起 ,符號:a“|b”
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) c = {4,5,6,12,25,13,8,9,10} print(a.union(b,c)) #執行結果: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 25}
3.0 差集:difference() 方法用於返回集合的差集,即返回的集合元素包含在第一個集合中,但不包含在第二個集合(方法的參數)中 符號:"a-b"
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) c = {4,5,6,12,25,13,8,9,10} print(a.difference(b,c)) #執行結果: {1, 2, 3}
4.0 反相交集:symmetric_difference() 方法返回兩個集合中不重復的元素集合,即會移除兩個集合中都存在的元素 符號:"a^b"
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) c = {4,5,6,12,25,13,8,9,10} print(a.symmetric_difference(b)) #執行結果: {1, 2, 3, 4, 7, 8, 9, 10}
5.0 父子集:issuperset() 方法用於判斷指定集合的所有元素是否都包含在原始的集合中,如果是則返回 True,否則返回 False
set.symmetric_difference(set)
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) c = {4,5,6,12,25,13,8,9,10} print(a.issuperset(b)) #a 是否完全包括b 父集 print(a.issubset(b)) # a是否在在b裏面 子集 #執行結果: False False
intersection_update() 方法用於獲取兩個或更多集合中都重疊的元素,即計算交集。
intersection_update()
方法不同於 intersection()
方法,因為 intersection()
方法是返回一個新的集合,而 intersection_update()
方法是在原始的集合上移除不重疊的元素。
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.intersection_update(b) print(a) #執行結果: {5, 6}
symmetric_difference_update() 方法
symmetric_difference_update() 方法移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中。
set.symmetric_difference_update(set)
num1 =(1,2,3,4,5,6) num2 =(5,6,7,8,9,10) a = set(num1) b = set(num2) a.symmetric_difference_update(b) print(a) #執行結果: {1, 2, 3, 4, 7, 8, 9, 10}
difference_update()
difference_update() 方法用於移除兩個集合中都存在的元素。
difference_update()
方法與 difference()
方法的區別在於 difference()
方法返回一個移除相同元素的新集合,而 difference_update()
方法是直接在原來的集合中移除元素,沒有返回值。
set.difference_update(set)
【Rollo的Python之路】Python:集合學習筆記 Set