python集合运算操作详解(二)

东尧爱分享

这是东尧每天一篇文章的第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.操作符与内建方法的比较

很多的内建方法几乎和操作符等价。我们说“几乎等价”,意思是他们之间有一个重要的区别:当用操作符时, 操作符两边的操作数必须是集合。

在使用内建方法时,对象也可以是迭代类型的。为什么有了操作符还要内 建函数呢?主要就是内建函数可以避免操作符使用不当而报错。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G0KIBE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券