天天看點

python集合運算符_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.操作符與内建方法的比較

很多的内建方法幾乎和操作符等價。我們說“幾乎等價”,意思是他們之間有一個重要的差別:當用操作符時, 操作符兩邊的操作數必須是集合。

在使用内建方法時,對象也可以是疊代類型的。為什麼有了操作符還要内 建函數呢?主要就是内建函數可以避免操作符使用不當而報錯。