六、Python集合定義和基本操作方法


一、集合的定義方法及特點

1、特點:

  (1)由不同元素組成

#集合由不同元素構成
s={1,2,3,3,4,3,3,}
print(s)#運行結果:{1, 2, 3, 4}

  (2)集合無序

#集合無序
s={'lilei','liuhua','alax','bob','bbb','bob'}
print(s)#運行結果:{'bob', 'liuhua', 'bbb', 'alax', 'lilei'}

  (3)集合只能存放數字、字符串和元祖(即不可變類型)

#集合只能存放不可變類型
s={'alax',12,[1,2],('bab')}#[1,2]為列表類型
print(s)

  運行結果:

 2、定義方式

  類型一:s={ }

  類型二:s=set( )

s=set('hel')
print(s)#輸出結果:{'h', 'l', 'e'}

二、集合的內置方法

1、.add( )     添加(不可添加相同元素)

#添加
s1={1,2,3}
s1.add('alax')
print(s1)#輸出結果:{1, 2, 3, 'alax'}
s2={1,2,3}
s2.add(3)
print(s2)#輸出結果:{1, 2, 3}

2、.clear( )    清空、.copy( )   拷貝

#清空、拷貝
s={1,2,3}
s1={'baba'}
s.clear()
print(s)#輸出結果:set()
s1.copy()
print(s1)#輸出結果:{'baba'}

3、刪除 .pop( ) 隨機刪除   .remove( )指定刪除——>元素不存在會報錯   .discard( )指定刪除——>元素不存在不會報錯

#刪除
s1={'ax',1,2,3}
s1.pop()
print(s1)#運行結果:{1, 'ax', 2}
s2={'ax',1,2,3}
s2.remove('ax')
print(s2)#運行結果:{1, 2, 3}
#s2.remove('axxx')
#print(s2)#不存在,運行結果報錯
s3={'ax',1,2,3}
s3.discard('axxxx')
print(s3)#運行結果:{1, 2, 3, 'ax'},不存在但是不報錯

二、集合關系運算、交叉,並集

1、基本關系運算

  現在我們舉一個例子

  例:現在有同學'bob','alax','zh'學習Python,有同學'bob','zh'學習Linux,用列表統計處即學習Python也學習Linux的同學名單。

  解答:此題使用列表解決有三種寫法,如下所示:

#列表舉例
python_l=['bob','alax','zh']
linux_l=['zh','bob']

# #方法一:
# for i in python_l:
#     for j in linux_l:
#         if i==j:
#             print(i)#運行結果:['bob', 'zh']

# #方法二:
# for name_l in python_l:
#     if name_l in linux_l:
#         print(name_l)#運行結果:['bob', 'zh']

#方法三:
python_l_and_linux_l=[]
for name_l in python_l:
    if name_l in linux_l:
        python_l_and_linux_l.append(name_l)
print(python_l_and_linux_l)#運行結果:['bob', 'zh']

   現在我們用集合來解決此類問題:

 

如上圖所示,求即學習Python_l和Linux_l的同學,即求交集部分

(1)交集,A.intersection(B) A與B的交集  或者 A&B

  例題所示代碼表示為:

python_l=['bob','alax','zh']
linux_l=['zh','bob']
#——————轉化為集合形式——————————
p_l=set(python_l)
l_l=set(linux_l)
#——————求兩個集合的交集————————
print(p_l.intersection(l_l))#運行結果:{'zh', 'bob'}
print(p_l&l_l)#運行結果:{'zh', 'bob'}

  補充:交集更新  A.intersection_updata(B)

(2)並集,A.union(B)  A與B的並集 或者A|B

#集合求並集
python_l=['bob','alax','zh']
linux_l=['zh','bob','hahah']
#——————轉化為集合形式——————————
p_l=set(python_l)
l_l=set(linux_l)
#——————求兩個集合的並集————————
print(p_l.union(l_l))#運行結果:{'alax', 'hahah', 'zh', 'bob'}
print(p_l|l_l)#運行結果:{'alax', 'hahah', 'zh', 'bob'}

(3)差集:即A中存在但是B中不存在的元素  A.diference(B)   或者  A-B或者B-A

#集合求差集
python_l=['bob','alax','zh']
linux_l=['zh','bob','hahah']
#——————轉化為集合形式——————————
p_l=set(python_l)
l_l=set(linux_l)
#——————求兩個集合的差集————————
print(p_l-l_l)#運行結果:{'alax'}
print(l_l-p_l)#運行結果:{'hahah'}
print(p_l.difference(l_l))#運行結果:{'alax'}

  圖解如下:

 

 

   補充:差集更新

python_l=['bob','alax','zh','hghg']
linux_l=['zh','bob','hahah','hghg','hhhh']
#——————轉化為集合形式——————————
p_l=set(python_l)
l_l=set(linux_l)
p_l.difference_update(l_l)
print(p_l)#運行結果:{'alax'}

(4)交叉補集   A.symmetric_difference(B)  或者  A^B

#交叉補集
python_l=['bob','alax','zh']
linux_l=['zh','bob','hahah']
#——————轉化為集合形式——————————
p_l=set(python_l)
l_l=set(linux_l)
print(p_l.symmetric_difference(l_l))#運行結果:{'alax', 'hahah'}
print(p_l^l_l)#運行結果:{'alax', 'hahah'}

  圖解如下:

 

2、其他關系運算

(1)判斷兩個集合的交集是否為空  A.isdisjoint(B)

s1={'kk','bb','zz'}
s2={'kk','ss','aa'}
s3={1,2,3}
result1=s1.isdisjoint(s2)
print(result1)#運行結果:False  ——> 即交集不為空
result2=s1.isdisjoint(s3)
print(result2)#運行結果:True  -->即交集為空

(2)判斷兩個集合的包含關系

  集合A>=B  A.issubset(B)       集合A<=B   A.issuperset(B)

 

s1={1,2,3}
s2={4,5,6,1,2,3}
result1=s1.issubset(s2)
print(result1)#運行結果:True
result2=s1.issuperset(s2)
print(result2)#運行結果:False
result3=s2.issuperset(s1)
print(result3)#運行結果:True

 

(3)更新  A.update(B)  

s1={1,2,5}
s2={7,8}
s1.update(s2)
print(s1)#運行結果:{1, 2, 5, 7, 8}

三、補充:

  集合是可變類型,當定義不可變集合時,可使用s=frozenset(**)

s=frozenset('hello')
print(s)#運行結果:frozenset({'l', 'o', 'h', 'e'})
#不可進行添加刪除等操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM