Python資料結構集合 set

2022-06-28 12:24:15 字數 3057 閱讀 8509

集合 set,collection翻譯為集合型別或容器,是乙個大概念。

集合特性:

可變、無序、不重複、可迭代的元素的集合。

示例:

1、set集合的元素要求必須是可hash的

2、目前所學過的不可hash的型別有:list、set、bytearray、dict

3、元素不可以索引,因為無序

4、set可使用for...in迭代   

示例,如下幾種寫法都是錯誤的:

s5 =

s5 =

s5 = }

s5 = ,bytearray(b'abc'),(1,2,[3]),}

返回typeerror,unhashable type: 'dict'  'list' 'bytearray' 'set'  

add():增加乙個元素到set中,如果元素存在則什麼也不做,生成新的集合

update(*others):合併其他元素到set集合中,引數others必須是可迭代物件,就地修改

remove(elem):從set中移除乙個元素,元素不存在則丟擲異常,keyerror

discard(elem):從set中移除乙個元素,元素不存在什麼都不做,則不拋異常

pop() -->item:移除並返回任意元素,因為是無序,所有不像列表不指定則是從尾部彈出,空集返回keyerror異常

clear():移除集合,標記為丟棄和**資源

要麼刪除,要麼加入新的元素,非線性結構無法索引,但是可遍歷迭代所有的元素; 

成員運算子in、not in,判斷元素是否在set集合中,效率極高:

從上圖得出,線性結構查詢的時間複雜度為o(n),隨著規模的增大,耗時越長;

set、dict等非線性結構,內部使用了hash演算法,時間複雜度可以做到o(1),查詢的時間和資料規模無關。

可雜湊(hash)型別:

數值型:int、float、complex

布林型:true、false

字串:string、bytes

元組:tuple

none

以上都是不可變型別,稱之為可雜湊型別,不可hash型別有:list、set、dict、bytearray,set元素必須是可hash。

集合概念:

全集:所有元素的集合。

子集:乙個集合a所有的元素都在另外乙個集合b內,a是b的子集,b是a的超集;

a是b的子集,且a不等於b,a就是b的真子集,b是a的真超集。

並集:多個集合合併的結果

交集:多個集合的交匯的公共部分

差集:集合中除去和其他集合的公共部分

並集:將兩個集合元素合併在一起,組成乙個新的集合,稱之為a與b的並集

union(*other):返回和多個集合合併後的新的集合,運算子為 | 

update(*other):和多個集合合併,就地修改,運算子為 |= 

s1 = set(range(5))

s2 = set(range(3,7))

n = s1.union(s2) #

等價於 n = s1 | s2

#

s1 |=s2

s1.update(s2)

s1 = s1 |s2

以上三個等價,都是就地修改.

交集:集合a和b,相交,兩個集合公共的部分組成的集合

intersection(*other):返回和多個集合的交集,& 運算子表示,等同於intersection;

intersection_update(*other):獲取多個集合的交集,並就地修改 &=   

差集:集合a和b,由所有屬於a且不屬於b的元素組成的集合

difference(*other):返回和多個集合的差集,- 運算子表示

difference_update(*other):就地修改 -= 

對稱差集:

集合a和b,由所有不屬於a和b的交集元素組成的集合,(a -b) u (b - a)

symmetric_difference(other):返回和另乙個集合的對稱差集 ^ 運算子表示

symmetric_difference_update(other): 就地修改  ^=  

如上圖示:對稱差集則為陰影部分的面積

issubset(other) <=:判斷當前集合是否是另乙個集合的子集

set1 < set2 :則判斷s1是s2的真子集

issupersubset(other) >=:判斷當前集合是否是other的超集

set1 > set2:判斷set1是否是set2的真超集 

isdisjoint(other):當前集合和另乙個集合沒有交集,沒有交集,返回true. 

python 資料結構 Set 集合

student print student 輸出集合,重複的元素被自動去掉 成員測試 if rose in student print rose 在集合中 else print rose 不在集合中 rose 在集合中 set可以進行集合運算 a set abracadabra b set alac...

Python資料結構之集合Set

python中的set 資料結構具有的乙個特殊屬性就是set 中不存在重複元素 1 集合定義 a set 2 向set中新增元素 a set 1,2,3,4 用add a.add 5 用或運算符號 a set還有個update函式,可以接受多組引數一次新增到set裡a.update 5,6,3 11...

集合 C 資料結構 集合 set

工作也不想做,部落格也不想寫qaq又是乙個難熬的下午 這個月的leetcode每日一題落下了好多,主要是動態規劃我真不會,看題解基本也想不明白,dp我的一生之敵 x x 這裡要介紹一下順序容器和關聯容器的區別。順序容器就是按照元素在容器中的位置,來進行儲存和訪問,例如vector deque lis...