標籤:card att int 方法 add 排列 png span pre
0、什麼是集合?
集合是一個無序的,不重複的資料群組合,它的主要作用如下:
去重,把一個列表變成集合,就自動去重了
關係測試,測試兩組資料之前的交集、差集、並集等關係
集合(set):把不同的元素組成一起形成集合,是python基本的資料類型。
集合元素(set elements):組成集合的成員(不可重複)
集合對象是一組無序排列的可雜湊(不可變,類似字典的鍵)的值:集合成員可以做字典的鍵
集合分類:可變集合、不可變集合
可變集合(set):可添加和刪除元素,非可雜湊的,不能作為字典的鍵,也不能做其他集合的元素
不可變集合(frozenset):與上面恰恰相反
li=[[1,2],‘a‘,‘b‘]s =set(li) # TypeError: unhashable type: ‘list‘print(s)
a=set(‘alex li a‘) #有多個 aprint(a){‘ ‘, ‘l‘, ‘i‘, ‘a‘, ‘x‘, ‘e‘} # 集合會把重複的去掉,並無序的列印出來b=[‘aaa‘,‘bbb‘,‘aaa‘]s=set(b)print(s){‘aaa‘, ‘bbb‘} # 列表裡有重複,會把重複的去掉
1、建立集合
由於集合沒有自己的文法格式,只能通過集合的方法 set() 和 frozenset() 建立,或者 {} 來建立
s1 = set(‘alvin‘) s2= frozenset(‘yuan‘) # 不可變集合s3={1,2,3}print(s1,type(s1)) #{‘l‘, ‘v‘, ‘i‘, ‘a‘, ‘n‘} <class ‘set‘>print(s2,type(s2)) #frozenset({‘n‘, ‘y‘, ‘a‘, ‘u‘}) <class ‘frozenset‘>
2、訪問集合
由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍曆或使用in、not in來訪問或判斷集合元素。
s1 = set(‘alvin‘)print(‘a‘ in s1)print(‘b‘ in s1)#s1[1] #TypeError: ‘set‘ object does not support indexing for i in s1: print(i)# # True# False# v# n# l# i# a
3、更新集合
可使用以下內建方法來更新:
set.add():增
set.remove():刪
set.update():改
注意:只有可變集合才能更新:
# s1 = frozenset(‘alvin‘)# s1.add(0) #AttributeError: ‘frozenset‘ object has no attribute ‘add‘ s2=set(‘alvin‘)s2.add(‘mm‘) # ‘mm’ 會作為一個整體存入print(s2) #{‘mm‘, ‘l‘, ‘n‘, ‘a‘, ‘i‘, ‘v‘} s2.update(‘HO‘)# 添加多個元素,把 HO 拆開,作為單個元素添加進去,如果有重複的,會去重print(s2) #{‘mm‘, ‘l‘, ‘n‘, ‘a‘, ‘i‘, ‘H‘, ‘O‘, ‘v‘}
s2.update([12,‘alex‘,‘eee‘,‘alvin‘]) # 列表裡面,元素是一個整體,print(s2) # {‘l‘, ‘n‘, ‘alvin‘, ‘a‘, 12, ‘i‘, ‘alex‘, ‘v‘, ‘eee‘} s2.remove(‘l‘) # 指定刪除,當值不存在時,會報錯print(s2) #{‘mm‘, ‘n‘, ‘a‘, ‘i‘, ‘H‘, ‘O‘, ‘v‘}s2.discard(‘vvvv‘) # 指定刪除,當值不存在時,不會報錯s2.pop() # 隨機刪除一個元素s2.clear() # 清空集合del s2:刪除集合本身
4、集合類型操作符
1 in ,not in:判斷某元素是否在集合內
2 集合等價與不等價(==, !=)
3 子集、超集
4 print(a.isdisjoint(b)),兩個集合沒有任何關聯就返回為真
Python資料類型-集合