1 集合 set
1)集合介紹
集合時可變的容器
集合內的數據對象是唯一的,不能重複多次
集合是無序的存儲結構,集合中的數據沒有先後關係
集合內的元素必須是不可變的對象
集合是可迭代的,可以使用for語句遍歷
集合是相當於只要鍵沒有值的字典,鍵則是集合的數據
2)集合的創建
1.創建集合的構造函數:
set() 創建一個空集合對象的唯一方式(不能使用{}來創建空集合)
set(iterable)用可迭代對象來創建新的集合
示例:
s = set() #s綁定一個空集合
s = set(range(1,5)) #s = {1,2,3,4}
s = set("hello") #s = {'h', 'o', 'e', 'l'},去重了
注:非空集合用{}括起來,內部各個元素用逗號“,”分割開
2.字面值方式來創建非空集合:
s = {1,2,3,4,5,1,3} #s = {1, 2, 3, 4, 5},去重
#不可以使用s = {},此時創建的不是一個集合set,而是一個字典
s = set({1:"1",2:"2",3:"3"}) #s = {1, 2, 3}
#由於字典本身爲一個可迭代對象,對其進行迭代時,字典提供他的鍵出來
s = set([1,32.3,'ad']) #s = {32.3, 1, 'ad'}
s = {1,2,'s',(1,2)} #s = {1,2,'s',(1,2)}
s = {1,2,'s',[1,2]} #error ,[1,2]是一個可變對象
3.集合推導式
集合推導式是用可迭代對象創建集合的表達式
語法:
{ 表達式 for 變量 in 可迭代對象 [ if 真值表達式] }
注:[]代表其中內容可以省略
如果運算結果中有重複元素,會自動去重
示例:
s = { x**2 for x in range(6) if x > 3}
#s = { 16, 25 }
集合推導式的嵌套等同於列表推導式的嵌套
3)集合的運算:
交集 &
並集 |
補集 -
對稱補集^
子集 <
超集 >
示例:
>>> s = {1,2,3}
>>> s1 = {1,4,5}
&:生成兩個集合的交集
s&s1 = {1}
|:生成兩個集合的並集
s|s1 = {1, 2, 3, 4, 5}
-:生成前一個集合對應於後一個集合的補集,即生成屬於前一個集合但不屬於後一個集合的元素組成的集合
s-s1 = {2, 3}
^:生成兩個集合的對稱補集,即去掉兩個集合的公共元素後合併
s^s1 = {2, 3, 4, 5}
<:判斷一個集合是另一個集合的子集
>:判斷一個集合是另一個集合的超集
s2 = {1,2}
s2 < s #True
s > s2 #True
s2 < s1 #False
== != :判斷集合相同或者不同
{1,2,3} == {3,2,1} #True
>=,<= :表示子集或者相當 與 超集或者相等
in , not in 運算符:
等同於列表的in,not in 運算符
3 in s #True
集合和字典的優點:
in ,not in 運算速度比較快
能用於集合的內建函數:
len(x),max(x),min(x),sum(x),any(x),all(x)
4)python3中常用的集合方法:
方法 | 作用 |
---|---|
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 |
2 固定集合 frozenset
1)介紹
可變的對象對應的不可變的對象
list ==> tuple
set ==> frozenset
固定集合是不可變的,無序的,含有唯一元素的集合(可以看成一個不可以改變的集合)
作用:
固定集合可以作爲字典的鍵,還可以作爲集合的值
d = { frozenset({1,2,3}):"123" }
2)固定集合 frozenset的創建
固定集合的構造函數 frozenset()
frozense() 創建一個空的固定集合
frozenset(iterable) 用可迭代對象創建一個新的固定集合
示例:
fz = frozenset()
fz = frozenset("hello")
fz = frozenset([1,2,3,4,5])
3)固定集合的運算:
交集 & ,並集 |,補集 -,對稱補集 ^
in ,not in運算
is , is not運算
<,<=,>,>= ==,!=
(以上的運算符用法都等同於set中該運算符的用法)
固定集合的方法,相當於集合的全部方法去掉修改集合的方法