Python基礎13 集合的建立與修改 不可變集合 discard() set() frozenset()
阿新 • • 發佈:2020-10-05
1 #集合 2 3 #集合是一種可迭代 無序 不能包含重複元素的 資料結構 4 #在不考慮順序和重複性的情況下,序列和集合是可以相互替代的 5 #集合分為可變集合和不可變集合 6 # set frozenset 7 8 #建立可變集合 9 #直接用{}來建立 或者用set()來建立 10 a={1,3,5,7,9,"1"}; 11 #b=set(1,2); 12 #當我們這樣寫的時候又會報錯 13 #iterable要求可以迭代 14 b=set((1,2,3,4,5)) 15 print(a,"\n",b);16 #這裡我們反覆的重複這段語句 17 #我們發現a中的"1"的位置總是在變動的 18 #因為集合是無序的,我們無法向序列一樣用下標來訪問 19 #print(a[0]); 20 #所以這樣的操作是無效的 21 22 #而如果存在資料內容又重複的,他會自動的只保留一個數據 23 b=set([1,2,1,2,1,2]); 24 print(b); 25 print(type(b)); 26 #輸出結果也只有1和2 27 28 c={}; 29 print(type(c)); 30 #這裡就算{}中什麼都沒有,但是也已經建立了集合c 31 #但是卻不是set, 而是dict,就是字典32 33 #如果我們需要檢視某個集合裡面資料個數 34 #需要使用len()函式!!! 是函式!!不是方法!!! 35 print(len(b)); 36 37 print("///////////////////////////////////"); 38 39 #修改可變集合 40 #add(elem)新增元素 41 #如果元素已經存在,則不會重複新增,也不會異常丟擲 42 b.add(1); 43 print(b); 44 #輸出結果還是1和2,也沒有異常的丟擲 45 #注意一下,這個方法是沒有返還值的 46 print(b.add(3)); 47 #如果這麼寫的話,輸出的結果就是None 48 49 #上面我們建立的c的型別並不是set而是dict 50 #c.add(1); 51 #那麼這句話就自然無法執行 52 #因為.add是set的方法而不是dict的 53 54 print("///////////////////////////"); 55 56 #刪除元素 57 #remove(elem); 58 a.remove(1); 59 print(a); 60 #這裡a中的1就被移除了 61 #a.remove(55); 62 #而移除的元素不在其中 63 #就會丟擲異常 64 a.add(1); 65 print(a.remove(1)); 66 #方法remove沒有返還值 67 68 #remove如果沒有找到對應的值的時候 69 #會異常丟擲 70 #我們也可以用discard(elem);來實現 71 #discard就算沒有找到對應的資料刪除 72 #也不會異常丟擲 73 74 a.discard(100); 75 #程式並沒有丟擲錯誤 76 a.add(100); 77 a.discard(100); 78 print(a); 79 80 81 #除了remove我們還有pop可以使用 82 #基本用法一致 83 #pop()刪除集合中任意一個元素並且告訴你刪除的是哪一個 84 d={1,2,3,4,5,6}; 85 print(d.pop()); 86 print(d); 87 #返還值是1,而1也被移除了 88 #我們也可以換種思維理解 89 dd=d.pop(); 90 print(dd); 91 print(d); 92 #如果把程式碼寫成這樣 93 #可以理解成取d中的一個元素賦值給了dd 94 95 #clear() 96 #清除集合,就不用多說了 97 d.clear(); 98 print(d); 99 100 #遍歷集合 101 #因為集合是沒有索引的,所以不能通過下標來確定 102 #但是可以通過for語句的迴圈來訪問集合內的所有元素 103 d={1,3,8,9,5,"p"}; 104 for x in d: 105 print(x); 106 #這樣我們就可以訪問集合裡的所有元素了 107 108 print("////////////////////////////////////"); 109 110 #不可變集合 111 #frozenset(iterable); 112 #來建立不可變集合,同時不能用{}來建立,那創建出來就是一個set可變的集合 113 114 f=frozenset([1,8,3,5,4]); 115 print("{0}\n{1}".format(f,type(f))); 116 #那麼它可不可以將set轉變成frozenset呢? 117 frozenset(d); 118 print("{0}\n{1}".format(d,type(d))); 119 #這樣雖然沒有報錯,但是d的型別任然沒有發生變化 120 #frozenset([d]); 121 #print("{0}\n{1}".format(d,type(d))); 122 #而這樣寫卻直接報錯了 123 #這裡frozenset應該和set是不能相互轉換的(我沒查到) 124 125 #集合推導式 126 #和列表推導式完全一致 127 #唯一的區別就是,結果輸出是給了集合 128 #不做贅述