python~集合詳解
集合的基本操作
首先需要明確的是:集合(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]