集合 set
集合是可變的容器
集合內的數據對象都是唯一的(不能重復多次的)
集合是無序的存儲結構,集合中的數據沒有先后關系
集合內的元素必須是不可變對象
集合是可迭代對象(可以用for等遍歷)
集合是相當於只有鍵,沒有值的字典(鍵則是集合的數據)
創建空集合:
set()
創建非空集合的字面值:
s = {1,2,3}
集合的構造函數:set
set() # 創建一個空的集合對象(不能用{}來創建空集合) set(iterable) # 用可迭代對象創建一個新的集合對角
# 示例: s = set() s = {1,2,3,4} s = set("ABC") s = set("ABCABC") # s = {"A","B","C"} s = set([1,0,3.14,0.618]) s = {1,2,[3,4],5} #報錯,集合內不能放列表和字典 s = {1,2,{3,4},5} #出錯集合是可變對象
集合的運算:
交集&,並集|,補集-,對稱補集^ , 子集< ,超集>
# & 運算符生成兩個集合的交集(兩個集合的共同部分) s1 = {1,2,3} s2 = {2,3,4} s3 = s1 & s2 #s3={2,3} # | 生成兩個集合的並集 s1 = {1,2,3} s2 = {2,3,4} s3 = s1 | s2 #s3 ={1,2,3,4} # - 生成兩個集合的補集 s1 = {1,2,3} s2 = {2,3,4} s3 = s1 - s2 #生成屬於s1,但不屬於s2的所有元素的集合 # ^ 生成兩個集合的對稱補集 s1 = {1,2,3} s2 = {2,3,4} s3 = s1 ^ s2 #s3 ={1,4} # > 判斷一個集合是另一個集合的超集 # < 判斷一個集合是另一個集合的子集 s1 = {1,2,3} s2 = {2,3} s1 > 2s # True, s1為s2的超集 s2 < s1 # True,s2為s1的子集 # == != 集合相同或不同 s1 = {1,2,3} s2 = {2,3,1} s1 == s2 #True 相同 s1 != s1 #False # >= <= 超集或相同,子集或相同
練習
# 1.經理有:曹操,劉備,孫權 # 技術員有:曹操,孫權,張飛, 關羽 # 用集合求: # 1. 即是經理也是技術員的有誰? # 2. 是經理,但不是技術人員的都有誰? # 3. 是技術人員,但不是經理的人都有誰? # 4. 張飛是經理嗎? # 5. 身兼一職的人都有誰? # 6. 經理和技術人員共有幾個人? l = {"曹操","劉備","孫權"} j = {"曹操","孫權","張飛","關羽"} print("即經理也是技術員的有:",l&j,) print("是經理,但不是技術人員的有",l-j) print("是技術人員,但不是經理的有",j-l) if "張飛" in l: print("是經理") else: print("張飛,不是經理") print("身兼一職的人:",l^j) print("經理和技術人員共有",len(l|j))
集合的方法:
# 方法 # 意義 S.add(e) # 在集合中添加一個新的元素e;如果元素已經存在,則不添加 S.remove(e) # 從集合中刪除一個元素,如果元素不存在於集合中,則會產生一個KeyError錯誤 S.discard(e) # 從集合S中移除一個元素e,在元素e不存在時什么都不做; S.clear() # 清空集合內的所有元素 S.copy() # 將集合進行一次淺拷貝 S.pop() # 從集合S中刪除一個隨機元素;如果此集合為空,則引發KeyError異常 S.update(s2) # 等同於 S l= s2, 用 S與s2得到的全集更新變量S S.difference(s2) # S - s2 補集運算,返回存在於在S中,但不在s2中的所有元素的集合 S.difference_update(s2) # 等同於 S -= s2 S.intersection(s2) # 等同於 S & s2 S.intersection_update(s2) # 等同於S &= s2 S.isdisjoint(s2) # 如果S與s2交集為空返回True,非空則返回False S.issubset(s2) # 如果S與s2交集為非空返回True,空則返回False S.issuperset(...) # 如果S為s2的超集返回True,否則返回False S.symmetric_difference(s2) # 返回對稱補集, 等同於 S ^ s2 S.symmetric_difference_update(s2) # 等同於 S ^= s2, 用 S 與 s2 的對稱補集更新 S S.union(s2) # 生成 S 與 s2的全集, 等同於 S \
# 集合是可迭代對象
集合推導式
集合推導式是用可迭代對象創建集合的表達式
# 語法: # {表達式 for 變量 in 可迭代對象 [if 真值表達式]} # 示例: # s = {x**2 for x in range(1,10)} # 集合推導式可以嵌套 # 語法用列表推導式的嵌套相同
固定集合 frozenset(原封集合)
固定集合是不可變的,無序的,含有唯一元組的集合
# 作用: # 固定集合可以作為字典的鍵,還可以作為集合的值(可以放固定鍵) # 創建固定集合構造函數 frozenset frozenset()# 創建一個空的固定集合對象 frozenset(iterable)# 用可迭代對象創建一個新的固定集合對象 fz = frozenset() fz = frozenset (range(10)) fz = frozenset ([1,3,8,6,9]) d = {frozenset({1,2,3}):"集合1,2,3"}
固定集合的運算:
# &交集 | 並集 -補集 ^對稱補集 < 子集 >超集 # <= >= == != # in / not in # (以上運算規則等用於set中的規則)
固定集合的方法:
相當於集合的全部方法去掉修改集合的方法
python基礎總結
階段總結
# 數據類型: # 不可變類型: # 數字:bool,int,float,complex(復數) # 容器:str,tulpe,frozenset,bytes(備留) # 可變類型 # list,dict,set,bytearray(備留) # 值: # None,False,True
# 表達式: # 1 1 +1 # print("hello") # max("ABC")+min("123") # 條件表達式:x if x > y else y # 全部的推導式: # 列表,字典,集合推導式 # 語句: # 表達式語句: # print("hello") # """ABCD"""" # 賦值語句: # a = 100 # a = b = c = 200 # x,y = 100,200 # L[1] = 200 # d["key"] = "鍵" # del語句(刪除) # if 語句(如果)elif else: # while語句(循環) # for 語句(固定循環) # break語句(結束循環) # continue語句(重新執行循環) # pass語句
內建函數
# 容器相關 len(x),max(x),min(x),sum(x),any(x),all(x) # 構造函數: bool(x) int(x) float(x) complex(r=0.0,i = 0.0) str(x) list(x) tuple(x) dict(x) set(x) frozenset(x) # 數值型 函數: abs(x) round(x) pow(x,y,z=None) 冪運算 # 字符串相關 bin(x) oct(x) hex(x) chr(x) 數字 ord(x) 編碼 # 可迭代對象相關 range(start,stop,step) reversed(x) sorted(x,reverse=False) # 輸入輸出相關: input(x) print(...) # 其它: type(x) id(x)