集合 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交集:集合a和b,相交,兩個集合公共的部分組成的集合s1.update(s2)
s1 = s1 |s2
以上三個等價,都是就地修改.
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...