標籤:方式 abs update auto 子集和 cte add mos 應用
Set集合[可變]是一個無序的,不重複的資料群組合,它的主要作用如下:
1. 去重,把一個列表變成集合,就自動去重了
2. 關係測試,測試兩組資料之前的交集、差集、並集等關係
集合(set):把不同的元素組成一起形成集合,是python基本的資料類型。
集合分類:可變集合、不可變集合
可變集合(set):可添加和刪除元素,非可雜湊的[但是要求自己的元素是可Hash的],不能用作字典的鍵,也不能做其他集合的元素
不可變集合(frozenset):與上面恰恰相反
建立結合:
利用set()/ frozenset()建立,且元素必須是不可變的,利用大括弧{}輸出封裝
# 錯誤的建立s = set(‘a‘, 1, ‘b‘)print(s) # TypeError: set expected at most 1 arguments, got 3 li = [1, 2, ‘a‘, ‘b‘]s = set(li) # 列表變為集合print(s) # {1, 2, ‘a‘, ‘b‘}li2 = [1, 2, 1, ‘a‘, ‘a‘]s = set(li2)print(s) # 去重後: {1, 2, ‘a‘}li = [[1, 2,], ‘a‘, ‘b‘]s = set(li) # 報錯,TypeError: unhashable type: ‘list‘# sets1 = set(‘hello‘)print(s1) # {‘h‘, ‘l‘, ‘o‘, ‘e‘}# frozensets2 = frozenset(‘hhh‘)print(s2) # frozenset({‘h‘})
訪問集合
由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍曆或使用in、not in來訪問或判斷集合元素。
s1 = set(‘hello world‘)print(‘a‘ in s1) # Trueprint(‘b‘ in s1) # False# s1[1] #TypeError: ‘set‘ object does not support indexing# 迴圈迭代無序輸出for i in s1: print(i, end=‘\t‘) # e w o r d l h# 直接輸出print(s1) # {‘h‘, ‘w‘, ‘r‘, ‘l‘, ‘o‘, ‘d‘, ‘e‘, ‘ ‘} 輸入裡面有空格,輸出也有空格更新集合
s.add() :元素作為一個整體添加進去
s.update(): 必須添加的是一個序列,列表[可以理解為添加,但是是一個字元一個字元序列化的添加]
s.remove():刪除掉某一個元素
s.pop():刪除任何一個元素,因為set集合是無序的,刪除的隨機性
s.clear(): 清空set裡面的值
del set(): 刪除set集合
s1 = set(‘apple‘)print("原始set集合 :", s1)s1.add(‘samsung‘)print("add後的set : ", s1)s1.update(‘huawei‘)print("update後的set:", s1)s1.remove(‘a‘) # 因為添加的是序列後的單個字元,所以不能直接輸入print("remove後的set:", s1)s1.pop()print("pop後的set :", s1)s1.clear()print("clear後的set :", s1)del s1# print("del後的set :", s1) # 報錯 NameError: name ‘s1‘ is not defined
集合類型操作符
1 in ,not in
2 集合等價與不等價(==, !=)
3 子集、超集
4 聯合(|)操作與集合的or操作其實等價的,聯合符號有個等價的方法,union()
子集和超集: 父集必須多於子集和一個字元
S1是S0的父集合: s1.issuperset(s0) ==> s1 > s0
S0是S1的子集合: s0.issubset(s1) ==> s0 < s1
s1 = set(‘applesamsung‘)s0 = set(‘apple‘)print("原始set集合[s0] :", s0)print("原始set集合[s1] :", s1)print(‘s1是s0的父集合 :‘, s1 > s0) # 父集必須多於子集和一個字元print(‘s1是s0的issuperset:‘, s1.issuperset(s0)) # 父集必須多於子集和一個字元print(‘s0是s1的父集合 :‘, s0 < s1) # 父集必須多於子集和一個字元print(‘s0是s1的issubset :‘, s0.issubset(s1)) # 父集必須多於子集和一個字元
交集: s0.intersection(s1) ==> s0 & s1
並集: s0.union(s1) ==> s0 | s1
差集: s0.difference(s1) ==> s0 - s1 【以S0為基礎進行對比,in s0 not in s1】
對稱差集: s0.symmetric_difference(s1) ==> s0 ^ s1
s0 = set([1, 2, 3, 4, 5])s1 = set([4, 5, 6, 7, 8])print("原始set:s0:", s0)print("原始set:s1:", s1)print("【交集】and :", s0.intersection(s1)) # 取出交集print("【交集】s0&s1:", s0&s1) # 取出交集print("【並集】 :", s0.union(s1)) # 取出並集print("【並集】s0|s1:",s0 | s1) # 取出並集print("【S0差集】 :", s0.difference(s1)) # 以S0為主, in S0 not in S1print("【差集】s0-s1:", s0-s1) # 以S0為主, in S0 not in S1print("【S1差集】 :", s1.difference(s0)) # 以S1為主, in S1 not in S0print("【差集】s1-s0:", s1-s0) # 以S0為主, in S0 not in S1print("【對稱差集】 :", s1.symmetric_difference(s0)) # 除了公用的元素以外的元素print("【對稱差集】s0 ^s1:", s1 ^ s0 ) # 除了公用的元素以外的元素
set集合應用:最簡單的去重
‘‘‘最簡單的去重方式‘‘‘lis = [1,2,3,4,1,2,3,4]print list(set(lis)) #[1, 2, 3, 4]
Python學習---Python下[set集合]的學習