东尧爱分享
这是东尧每天一篇文章的第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.操作符与内建方法的比较
很多的内建方法几乎和操作符等价。我们说“几乎等价”,意思是他们之间有一个重要的区别:当用操作符时, 操作符两边的操作数必须是集合。
在使用内建方法时,对象也可以是迭代类型的。为什么有了操作符还要内 建函数呢?主要就是内建函数可以避免操作符使用不当而报错。