集合的基本操作
首先需要明确的是:集合(set)是一個無序的不重複元素序列,多用來進行排重;不支援切片和索引取值!
1.建立集合
>>> a={1,2,4,4}
>>> a
{1, 2, 4}
>>> type(a)
<class 'set'>
**建立空集合時需要注意:不能直接用大括号,隻能用set();否則建立的是一個字典
>>> b=set()
>>> type(b)
<class 'set'>
>>> c={}
>>> type(c)
<class 'dict'>
2.添加元素
add()方法是将要添加的元素作為一個整體添加到集合中,如果元素已經存在,則不進行任何操作
>>> a={1,3,5}
>>> a.add(1)
>>> a
{1, 3, 5}
>>> a.add(2)
>>> a
{1, 2, 3, 5}
>>> a.add((7,8))
>>> a
{1, 2, 3, 5, (7, 8)}
update()方法是把要添加的元素拆分成單個元素,去掉重複的之後存于集合中;或者了解為添加多個元素,參數可以是清單、元組、字典等,多個元素間用逗号隔開
>>> a={1}
>>> a.update([2,3,4])
>>> a
{1, 2, 3, 4}
>>> a.update({"a","b"})
>>> a
{1, 2, 3, 4, 'b', 'a'}
>>> a.update({"a","b"},[5,6])
>>> a
{1, 2, 3, 4, 'b', 5, 6, 'a'}
3.删除元素
pop:删除任意的元素并傳回該元素
>>> b={"a",1,4,7}
>>> b.pop()
'a'
>>> b.pop()
4
>>> b
{1, 7}
remove:當删除的元素在集合中就删除,當元素不存在集合中則引發異常KeyError
>>> b={"a",1,4,7}
>>> b.remove(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 6
>>> b.remove(7)
>>> b
{'a', 4, 1}
discard:當删除的元素不在集合中,傳回None,不會引發異常;在集合中則删除
>>> b={5,2,8,4}
>>> b.discard(9)
>>> b.discard(8)
>>> b.discard(4)
>>> b
{2, 5}
clear():用于清空集合中的所有元素
>>> s={1,2,3}
>>> s.clear()
>>> s
set()
4.成員運算符:in/not in
>>> a=set([1,2])
>>> 1 in a
True
>>> 3 in a
False
>>> 3 not in a
True
5.運算符判斷集合間的關系:> 包含;< 被包含;== 相等
>>> a=set([2,3,4,5])
>>> b=set([3,4])
>>> a>b
True
>>> a<b
False
>>> a==b
False
>>> a=set([2,3,4,5])
>>> b=set([2,3,4,5,6,7])
>>> a>b
False
>>> a<b
True
>>> a==b
False
>>> a=set([1,2])
>>> b=set([1,2])
>>> a>b
False
>>> a<b
False
>>> a==b
True
>>> a>=b
True
>>> a<=b
True
6.交集:使用符号&或(intersection),傳回兩個集合的共同元素組成的集合,即集合的交集
>>> st1=set("a","b")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: set expected at most 1 arguments, got 2
>>> st1=set("a")
>>> st2=set("b")
>>> st1&st2
set()
>>> st1=set("abc")
>>> st2=set("bcde")
>>> st1
{'b', 'c', 'a'}
>>> st2
{'d', 'b', 'e', 'c'}
>>> st1&st2
{'b', 'c'}
>>> a=range(1,5)
>>> b=range(3,8)
>>> set(a)&set(b)
{3, 4}
>>> set(a).intersection(set(b))
{3, 4}
7.并集:使用符号|或(union),傳回兩個集合的所有元素組成的集合,即集合的并集
>>> st1
{'b', 'c', 'a'}
>>> st2
{'d', 'b', 'e', 'c'}
>>> st1|st2
{'d', 'a', 'b', 'e', 'c'}
>>> a=range(1,5)
>>> b=range(3,8)
>>> set(a)|set(b)
{1, 2, 3, 4, 5, 6, 7}
>>> set(a).union(set(b))
{1, 2, 3, 4, 5, 6, 7}
8.差集:使用符号-或(difference),存在于前者,但不存在于後者的元素組成的集合
>>> st1
{'b', 'c', 'a'}
>>> st2
{'d', 'b', 'e', 'c'}
>>> st1-st2
{'a'}
>>> a=range(1,5)
>>> b=range(3,8)
>>> set(a)-set(b)
{1, 2}
>>> set(b)-set(a)
{5, 6, 7}
>>> set(a).difference(set(b))
{1, 2}
>>> set(b).difference(set(a))
{5, 6, 7}
9.補集:全集減去子集
>>> a=range(1,5)
>>> b=range(3,8)
>>> (set(a)|set(b))-set(a) #a的補集
{5, 6, 7}
>>> (set(a)|set(b))-set(b) #b的補集
{1, 2}
10.函數判斷集合間的關系
issuperset()方法所用是判斷集合st1是否是集合st2的父集,如果傳回是True,否則傳回False
>>> st1=set([1,2,3,4,5])
>>> st2=set([1,3])
>>> st1.issuperset(st2)
True
issubset()方法所用是判斷集合st2是否是集合st1的子集,如果傳回是True,否則傳回False
>>> st1=set([1,2,3,4,5])
>>> st2=set([1,3])
>>> st2.issubset(st1)
True
不可變集合:
不支援添加、删除和索引,可進行周遊操作
>>> a=frozenset([1,2,3])
>>> a
frozenset({1, 2, 3})
>>> type(a)
<class 'frozenset'>
>>> list(a)
[1, 2, 3]