《集合(1)》中以 set()
來建立集合,這種方式所創(chuàng)立的集合都是可原處修改的集合,或者說是可變的,也可以說是 unhashable
還有一種集合,不能在原處修改。這種集合的創(chuàng)建方法是用 frozenset()
,顧名思義,這是一個被凍結(jié)的集合,當然是不能修改了,那么這種集合就是 hashable 類型——可哈希。
>>> f_set = frozenset("qiwsir")
>>> f_set
frozenset(['q', 'i', 's', 'r', 'w'])
>>> f_set.add("python") #報錯,不能修改,則無此方法
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>> a_set = set("github") #對比看一看,這是一個可以原處修改的 set
>>> a_set
set(['b', 'g', 'i', 'h', 'u', 't'])
>>> a_set.add("python")
>>> a_set
set(['b', 'g', 'i', 'h', 'python', 'u', 't'])
喚醒一下中學數(shù)學(準確說是高中數(shù)學中的一點知識)中關(guān)于集合的一點知識,當然,你如果是某個理工科的專業(yè)大學畢業(yè),更應該熟悉集合之間的關(guān)系。
就一種關(guān)系,要么術(shù)語某個集合,要么不屬于。
>>> aset
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> "a" in aset
False
>>> "h" in aset
True
假設兩個集合 A、B
在交互模式下實驗
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a == b
False
>>> a != b
True
判斷集合 A 是否是集合 B 的子集,可以使用 A<B
,返回 true 則是子集,否則不是。另外,還可以使用函數(shù) A.issubset(B)
判斷。
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> c
set(['q', 'i'])
>>> c<a #c 是 a 的子集
True
>>> c.issubset(a) #或者用這種方法,判斷 c 是否是 a 的子集
True
>>> a.issuperset(c) #判斷 a 是否是 c 的超集
True
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a<b #a 不是 b 的子集
False
>>> a.issubset(b) #或者這樣做
False
http://wiki.jikexueyuan.com/project/start-learning-python/images/11901.png" alt="" />
可以使用的符號是“|”,是一個半角狀態(tài)寫的豎線,輸入方法是在英文狀態(tài)下,按下"shift"加上右方括號右邊的那個鍵。找找吧。表達式是 A | B
.也可使用函數(shù) A.union(B)
,得到的結(jié)果就是兩個集合并集,注意,這個結(jié)果是新生成的一個對象,不是將結(jié)合 A 擴充。
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a | b #可以有兩種方式,結(jié)果一樣
set(['a', 'i', 'l', 'o', 'q', 's', 'r', 'w'])
>>> a.union(b)
set(['a', 'i', 'l', 'o', 'q', 's', 'r', 'w'])
http://wiki.jikexueyuan.com/project/start-learning-python/images/11902.png" alt="" />
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a & b #兩種方式,等價
set(['q', 'i'])
>>> a.intersection(b)
set(['q', 'i'])
我在實驗的時候,順手敲了下面的代碼,出現(xiàn)的結(jié)果如下,看官能解釋一下嗎?(思考題)
>>> a and b
set(['a', 'q', 'i', 'l', 'o'])
http://wiki.jikexueyuan.com/project/start-learning-python/images/11903.png" alt="" />
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a - b
set(['s', 'r', 'w'])
>>> a.difference(b)
set(['s', 'r', 'w'])
-A、B 的對稱差集,如下圖所示
http://wiki.jikexueyuan.com/project/start-learning-python/images/11904.png" alt="" />
>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a.symmetric_difference(b)
set(['a', 'l', 'o', 's', 'r', 'w'])
以上是集合的基本運算。在編程中,如果用到,可以用前面說的方法查找。不用死記硬背。
總目錄 | 上節(jié):集合(1) | 下節(jié):運算符
如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。