1. 程式人生 > >python~集合詳解

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]