1. 程式人生 > >Python之集合

Python之集合

itself card idt tuple join ember 線性 intersect 屬於

集合性質:

可變的,無序的,不重復的元素集合

集合定義

s = set()
s = set(range(10))  #set(iterable)  

集合元素

set的元素要求必須可以hash 
目前學過的不可hash的類型有list、set 
元素不可以索引 
set可以叠代  

集合的method

add(elem)
    增加一個元素到set中 
    如果元素存在,什麽都不做
update(*others)    #Update a set with the union of itself and others
    合並其他元素到set集合中來
    參數others必須是可叠代對象
    就地修改
remove(elem)    #Remove an element from a set; it must be a member
    從set中移除一個元素
    元素不存在,拋出KeyError異常。為什麽是KeyError?
discard(elem)
    從set中移除一個元素 
    元素不存在,什麽都不做 
pop() -> item
  移除並返回任意的元素。為什麽是任意元素?
  空集返回KeyError異常   
clear()
    移除所有元素  

線性結構

線性結構的查詢時間復雜度是O(n),即隨著數據規模的增大而增加耗時 
set、dict等結構,內部使用hash值作為key,時間復雜度可以做到O(1),查詢時間和數據規模無關  

可hash:不可變

數值型int、float、complex 
布爾型True、False 
字符串string、bytes 
tuple 
None
以上都是不可變類型,成為可哈希類型,hashable  

集合基本概念

全集
    所有元素的集合。例如實數集,所有實數組成的集合就是全集
子集subset和超集superset
    一個集合A所有元素都在另一個集合B內,A是B的子集,B是A的超集 
真子集和真超集 p 
    A是B的子集,且A不等於B,A就是B的真子集,B是A的真超集
並集:多個集合合並的結果
交集:多個集合的公共部分
差集:集合中除去和其他集合公共部分  

並集

將兩個集合A和B的所有的元素合並到一起,組成的集合稱作集合A與集合B的並集 
union(*others)
    返回和多個集合合並後的新的集合 
|:運算符重載
    等同union
update(*others)
    和多個集合合並,就地修改
|=
    等同update  
技術分享圖片



交集

集合A和B,由所有屬於A且屬於B的元素組成的集合 
intersection(*others) 
    返回和多個集合的交集
&
    等同於intersection
intersection_update(*others)
    獲取和多個集合的交集,並就地修改 
&=
    等同於intersection_update  
技術分享圖片



差集

集合A和B,由所有屬於A且不屬於B的元素組成的集合 
difference(others)
    返回和多個集合的差集
-
    等同於difference
difference_update(others*)
    獲取和多個集合的差集並就地修改 
-=
    等同difference_update  
技術分享圖片



對稱差集

集合A和B,由所有不屬於A和B的交集元素組成的集合,記作(A-B)∪(B-A)
symmetric_differece(other) 
    返回和另一個集合的差集
^
    等同於symmetric_differece
symmetric_differece_update(other)
    獲取和另一個集合的差集並就地修改 
^=
    等同symmetric_differece_update
技術分享圖片

集合運算

issubset(other)、<= p 
    判斷當前集合是否是另一個集合的子集
set1 < set2
    判斷set1是否是set2的真子集
issuperset(other)、>=
    判斷當前集合是否是other的超集
set1 > set2 
    判斷set1是否是set的真超集
isdisjoint(other)
    當前集合和另一個集合沒有交集 
    沒有交集,返回True

  

  

Python之集合