前面我們學(xué)習(xí)了集合的幾種關(guān)系運(yùn)算,交集、并集、差集、對稱差集和父子集,我們都是用對應(yīng)的符號來取的。
同時集合也有一些內(nèi)置方法,可以實(shí)現(xiàn)取交集、并集、差集、對稱差集和父子集。
首先來看取交集的內(nèi)置方法。
hobbies1 = ['吃飯', '睡覺', '看書', '鋼琴', '跳舞', '游泳']
hobbies2 = ['吃飯', '睡覺', '打游戲', '追劇', '健身']
print(hobbies1.intersection(hobbies2))
兩種方法取的交集是一樣的。
然后再看取并集。
hobbies1 = {'吃飯', '睡覺', '看書', '鋼琴', '跳舞', '游泳'}
hobbies2 = {'吃飯', '睡覺', '打游戲', '追劇', '健身'}
print(hobbies1.union(hobbies2))
接著是取差集。
hobbies1 = {'吃飯', '睡覺', '看書', '鋼琴', '跳舞', '游泳'}
hobbies2 = {'吃飯', '睡覺', '打游戲', '追劇', '健身'}
print(hobbies1.difference(hobbies2))
print(hobbies2.difference(hobbies1))
對稱差集。
hobbies1 = {'吃飯', '睡覺', '看書', '鋼琴', '跳舞', '游泳'}
hobbies2 = {'吃飯', '睡覺', '打游戲', '追劇', '健身'}
print(hobbies1.symmetric_difference(hobbies2))
父子集。
s1 = {1, 2, 3}
s2 = {1, 2}
print(s1.issuperset(s2))
print(s1.issubset(s2))
上面的我就不詳細(xì)的展開講了,這些內(nèi)置功能還是用符號比較方便。
到這里我就把集合的關(guān)系運(yùn)算講完了,接下來我們學(xué)習(xí)集合的另外一種用途。
去重。
集合去重的話還沒辦法保證原來的順序的。我先定義一個列表,然后轉(zhuǎn)成集合。
l = ['a', 'b', 'c', 'a', 'd', 'e']
print(set(l))
打印結(jié)果出來了,我們看到打印出來的并沒有保證我們原來的順序。同樣的代碼我再運(yùn)行一下。
結(jié)果又變了,每次順序可能都不一樣。
還有就是集合只是針對不可變類型,前面我們也說過了。
我再定義一個列表,如果我要對它進(jìn)行去重的話,用集合就不行了,會直接報錯。
info = [['張三', 18]
, ['李四', 19]
, ['王五', 17]
, ['張三', 18]
, ['李四', 19]]
set(info)
因?yàn)樗锩媲短椎亩际橇斜恚斜碛侄际强勺冾愋?,如果我們要對它進(jìn)行去重的話也很簡單,還是一個for循環(huán)就實(shí)現(xiàn)了。
info = [['張三', 18]
, ['李四', 19]
, ['王五', 17]
, ['張三', 18]
, ['李四', 19]]
new_info = []
for i in info:
if i not in new_info:
new_info.append(i)
print(new_info)
集合也可以用len來統(tǒng)計(jì)長度。
也可以用in和not in 來做成員運(yùn)算。
還有for循環(huán)。
這幾個功能對于學(xué)到現(xiàn)在的你來說太簡單了,我就不做演示了。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python 集合類型4