東堯愛分享
這是東堯每天一篇文章的第17天
東堯寫文章的目标:分享東堯的經驗和思考,幫你擷取物質和精神兩方面幸福。
昨天已經講了集合的建立和可變集合的增删改查,其實集合可以看成數學意義上的無序和無重複元素的集合,是以,兩個set可以做數學意義上的交集、并集等操作。
1
集合類型操作符的使用
集合操作符和關系符号:
python符号
說明
in
是……的成員
not in
不是……的成員
==
等于
!=
不等于
是……的真子集
是……的子集
>
是……的真超集
>=
是……的超集
>=
交集
|
合集(并集)
- (減号)
差補或相對補集也叫差集
^
對稱差分
運算執行個體:
1. 并集(|)
并集(union)操作和集合的or其實是等價的,兩個集合的并集是一個新集合,該集合中的每個元素至少都是 一種一個集合的成員,即,屬于兩個集合其中之一的成員。并集符号有一個等價的方法: union()。
>>> s = set('hello')
>>> s1 = set('python')
>>> s | s1
{'t', 'y', 'e', 'h', 'p', 'o', 'l', 'n'}
2. 交集(&)
你可以把交集操作符必做成集合的and操作,兩個集合的交集是一個新的集合,該集合中的每個成員同時屬于 兩個集合中的成員。交集符号有一個等價的方法:intersection().
>>> s = set('hello')
>>> s1 = set('python')
>>> s & s1
{'h', 'o'}
3. 差集(-)
兩個集合的差集是一個新的集合,該集合中的成員隻屬于前者,不屬于後者,就是誰在符号的左邊就屬于 誰。差集符号又一個等價的方法: difference()。
>>> s = set('hello')
>>> s1 = set('python')
>>> s - s1
{'l', 'e'}
4.對稱差分(^)
兩個集合(如:s和s1)的對稱差分是一個新的集合,還集合中的元素是能屬于集合s或者集合t的成員,不能 同時屬于兩個集合。對稱差分符号有一個等價的方法: symmetric_difference()。
>>> s = set('hello')
>>> s1 = set('python')
>>> s ^ s1
{'t', 'l', 'y', 'e', 'p', 'n'}
5. |=操作符
給集合添加一個或多個成員,與update方法等價
>>> s = set('hello')
>>> s1 = set('python')
>>> s |= s1 # 相當于s = s | s1
>>> s
{'t', 'y', 'e', 'h', 'p', 'o', 'l', 'n'}
6.使用-=操作符删除集合中一個或多個成員
>>> s = set('hello')
>>> s1 = set('python')
>>> s -= s1
>>> s
{'l', 'e'}
7. ^=
更新集合中的元素,使得其中的元素隻屬于原集合s或僅是另一個集合s1中的成員。此操作符與方法:symmetric_difference_update()等價。
>>> s = set('hello')
>>> s1 = set('python')
>>> s ^= s1
>>> s
{'t', 'l', 'y', 'e', 'p', 'n'}
8.使用&=求兩個集合的交集
>>> s = set('hello')
>>> s1 = set('python')
>>> s &= s1
>>> s
{'h', 'o'}
2
集合類型的内建方法
1.适用于所有集合的方法(可變集合和不可變集合均适用)
方法名稱
說明
s.issubset(t)
如果s是t的子集,則傳回True,否則傳回False等價于小于等于号(
s.issuperset(t)
如果s是t的超集,則傳回True,否則傳回False,等價于大于等于号(>=)
s.union(t)
傳回一個新的集合,該集合是s和t的并集
s.intersection(t)
傳回一個新的集合,該集合是s和t的交集
s.difference(t)
傳回一個新的集合,該集合是s和t的差集
s.symmetric_diffence(t)
傳回一個新的集合,該集合是s或t的成員,但不是s和t共有的成員
s.copy()
傳回一個新的集合,該集合是s的淺拷貝
2.僅适用于可變集合的方法
方法名稱
說明
s.update(t)
用t中的元素修改s,其實就是求兩個集合的交集
s.intersection_update(t)
求集合s和t的交集
s.diffence_update(t)
s中的成員屬于s但不包含在t中的元素(求差集)
s.symmetric_diffence_update(t)
求兩個集合的對稱差補,就是s中的成員屬于s或t,但不同時屬于s或t
s.add(obj)
在集合s中添加對象obj
s.remove(obj)
從集合s中删除對象obj,如果obj不存在則抛去KeyError異常
s.discard(obj)
如果obj是集合s中的元素,則從集合s中删除對象obj
s.pop()
删除集合s中的任意一個元素,并傳回它
s.clear()
删除集合s中所有的元素
3.操作符與内建方法的比較
很多的内建方法幾乎和操作符等價。我們說“幾乎等價”,意思是他們之間有一個重要的差別:當用操作符時, 操作符兩邊的操作數必須是集合。
在使用内建方法時,對象也可以是疊代類型的。為什麼有了操作符還要内 建函數呢?主要就是内建函數可以避免操作符使用不當而報錯。