Python數據結構:集合
- 2020 年 1 月 19 日
- 筆記
- 集合的定義
使用大括弧,並且裡面必須有初始值,否則是dict字典類型
- 集合的特徵
集合內部的元素無序,所以不能使用索引、切片等操作
集合內部的元素具有唯一性,不允許元素重複出現
集合內部的元素,只能存放int, float, str, tuple等必須是可哈希的數據,set類型本身不可哈希
s1 = {1,2,3,'a','b','c',7,8,9} s2 = {} print(type(s1)) #輸出<class 'set'> print(type(s2)) #輸出<class 'dict'> for i in s1: print(i,end=' ') #輸出1 2 3 b 7 8 9 a c,可見set是無序的
- 多循環的集合內涵
s1 = {1,2,3} s2 = {'i', 'love', 'you'} s3 = {m * n for m in s2 for n in s1} #相當於把s2中的每個元素乘以1/2/3 print(s3) #輸出{'iii', 'lovelove', 'you', 'youyou', 'i', 'youyouyou', 'ii', 'love', 'lovelovelove'}
- 刪除元素
s = {'a','b','c','d','e','f'} # s.remove('k') #remove刪除不存在的元素報錯keyerror s.discard('k') #discard刪除不存在的元素不報錯,只是刪除失敗而已
- 交叉並補
交集intersection
差集difference
並集union
子集issubset:檢查一個集合是否為另一個集合的子集
超集issuperset:檢查一個集合是否為另一個集合的超集(如果一個集合S2中的每一個元素都在集合S1中,且集合S1中可能包含S2中沒有的元素,則集合S1就是S2的一個超集,反過來,S2是S1的子集)
s1 = {1,2,3,4,5,6} s2 = {5,6,7,8,9,0} s3 = s1.intersection(s2) #s1與s2的交集 print(s3) #輸出{5, 6} s4 = s1.difference(s2) #s1與s2的差集,相當於s1-s2 print(s4) #輸出{1, 2, 3, 4} s5 = s1.union(s2) #s1與s2的並集 print(s5) #輸出{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} i1 = s1.issubset(s2) #判斷s2是否為s1的子集,i1為False i2 = s1.issuperset(s2) #判斷s2是否為s1的超集,i2為False
- 冰凍集合
不可以進行任何修改操作的集合,其他屬性與集合完全一致。
s = {1,2,3} s = frozenset(s) print(s) #輸出frozenset({1, 2, 3})