集合#
视频
集合的元素必须是不可变对象,且元素间有互异性。分为两类:
它们的区别主要在于是否可变,以及写法上面。
set
的定义可以为:
set('Hello') # 写法 1
{'H', 'e', 'l', 'o'}
{'H', 'e', 'l', 'o'} # 写法 2
{'H', 'e', 'l', 'o'}
frozenset
的定义:
frozenset('Hello')
frozenset({'H', 'e', 'l', 'o'})
下面先以 set
为例 Python 如何操作集合的。
基本操作#
支持
add()
方法,添加元素
s = set(['Python','is','a','magic','language'])
s
{'Python', 'a', 'is', 'language', 'magic'}
s.add('!')
s
{'!', 'Python', 'a', 'is', 'language', 'magic'}
s = {5, 7, 3, 2, 9, 35, 5, 34, 5, 7}
s # 自动去重
{2, 3, 5, 7, 9, 34, 35}
min(s)
2
max(s)
35
len(s)
7
支持更新(
update()
)
a = set([1, 2, 3, 4])
b = set([3, 4, 5, 6])
a.update(b)
a
{1, 2, 3, 4, 5, 6}
方法
remove()
删除集合中元素
s = set('hello')
s
{'e', 'h', 'l', 'o'}
s.remove('h')
s
{'e', 'l', 'o'}
若
remove()
元素不存在,则会引发错误;而discard()
则不会。
s.remove('om')
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[14], line 1
----> 1 s.remove('om')
KeyError: 'om'
s.discard('om')
s
{'e', 'l', 'o'}
相等与不相等#
set('Python') == set('python')
False
set('Python') != set('python')
True
子集 与 超集#
<
、<=
、>
、>=
用来判断前面一个集合是否是后面一个集合的严格子集,子集,严格超集,超集。
set('Hello') < set('HelloWorld')
True
set('Hello') <= set('Hello')
True
set('Hello') < set('Hello')
False
并集(\(\bigcup\))使用 |
#
set('Hello') | set('world')
{'H', 'd', 'e', 'l', 'o', 'r', 'w'}
交集(\(\bigcap\))使用 &
#
set('Hello') & set('world')
{'l', 'o'}
差集(\(-\))使用 -
#
set('Hello') - set('world')
{'H', 'e'}
对称差使用 ^
#
set([1,2,3,4]) ^ set([3,4,5,6])
{1, 2, 5, 6}
可变与不可变#
a = set((2, 3))
a.remove(2)
a
{3}
a = frozenset((2, 3))
a.remove(2)
a
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[27], line 3
1 a = frozenset((2, 3))
----> 3 a.remove(2)
4 a
AttributeError: 'frozenset' object has no attribute 'remove'
集合的特性#
如是可变集合(
set
)与不可变集合(frozenset
)进行运算,得到的新集合的类型与左操作数相同。对于可变集合(
set
)可以进行就地修改,支持操作符:|=
、&=
、-=
、^=
。集合只能包含不可变的(即可散列的)对象类型。
a = set('Hello')
a |= set('Python')
a
{'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'}
a = set('Hello')
a &= set('Python')
a
{'o'}
a = set('Hello')
a -= set('Python')
a
{'H', 'e', 'l'}
a = set('Hello')
a ^= set('Python')
a
{'H', 'P', 'e', 'h', 'l', 'n', 't', 'y'}
b = set('Hello') | frozenset('Python')
b
{'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'}
c = frozenset('Python') | set('Hello')
c
frozenset({'H', 'P', 'e', 'h', 'l', 'n', 'o', 't', 'y'})