放
python 的 set 和其他語(yǔ)言類似, 是一個(gè)無(wú)序不重複元素集, 基本功能包括關(guān)係測(cè)試和消除重複元素。 set 和 dict 類似,但是 set 不儲(chǔ)存 value 值的。
1、set 的建立
建立一個(gè)set,需要提供一個(gè)list 作為輸入集合
set1=set([123,456,789]) print(set1)
輸出結(jié)果:
{456, 123, 789}
傳入的參數(shù)[123,456,789] 是一個(gè)list,而顯示的{456, 123, 789} 只是告訴你這個(gè)set 內(nèi)部有456, 123, 789 這3 個(gè)元素,顯示的順序跟你參數(shù)中的list 裡的元素的順序是不一致的,這也說(shuō)明了set 是無(wú)序的。
還有一點(diǎn),我們觀察到輸出的結(jié)果是在大括號(hào)中的,經(jīng)過(guò)之前的學(xué)習(xí),可以知道,tuple (元組) 使用小括號(hào),list (列表) 使用方括號(hào), dict (字典) 使用的是大括號(hào),dict 也是無(wú)序的,只不過(guò)dict 保存的是key-value 鍵值對(duì)值,而set 可以理解為只保存key 值。
回憶一下,在 dict (字典) 中建立時(shí),有重複的 key ,會(huì)被後面的 key-value 值覆蓋的,而 重複元素在 set 中自動(dòng)被過(guò)濾的。
set1=set([123,456,789,123,123]) print(set1)
輸出的結(jié)果:
{456, 123, 789}
2、set 新增元素
透過(guò)add(key) 方法可以加入元素到set 中,可以重複添加,但不會(huì)有效果
set1=set([123,456,789]) print(set1) set1.add(100) print(set1) set1.add(100) print(set1)
輸出結(jié)果:
{456, 123, 789} {456, 123, 100, 789} {456, 123, 100, 789}
3、set 刪除元素
透過(guò)remove(key) 方法可以刪除set中的元素
set1=set([123,456,789]) print(set1) set1.remove(456) print(set1)
輸出的結(jié)果:
{456, 123, 789} {123, 789}
4、set 的運(yùn)用
因?yàn)閟et 是一個(gè)無(wú)序不重複元素集,因此,兩個(gè)set 可以做數(shù)學(xué)意義上的union(並集), intersection(交集), difference(差集) 等操作。
範(fàn)例:
set1=set('hello') set2=set(['p','y','y','h','o','n']) print(set1) print(set2) # 交集 (求兩個(gè) set 集合中相同的元素) set3=set1 & set2 print('\n交集 set3:') print(set3) # 并集 (合并兩個(gè) set 集合的元素并去除重復(fù)的值) set4=set1 | set2 print('\n并集 set4:') print(set4) # 差集 set5=set1 - set2 set6=set2 - set1 print('\n差集 set5:') print(set5) print('\n差集 set6:') print( set6) # 去除海量列表里重復(fù)元素,用 hash 來(lái)解決也行,只不過(guò)感覺(jué)在性能上不是很高,用 set 解決還是很不錯(cuò)的 list1 = [111,222,333,444,111,222,333,444,555,666] set7=set(list1) print('\n去除列表里重復(fù)元素 set7:') print(set7)
運(yùn)行的結(jié)果:
{'h', 'l', 'e', 'o'} {'h', 'n', 'o', 'y', 'p'} 交集 set3: {'h', 'o'} 并集 set4: {'h', 'p', 'n', 'e', 'o', 'y', 'l'} 差集 set5: {'l', 'e'} 差集 set6: {'p', 'y', 'n'} 去除列表里重復(fù)元素 set7: {555, 333, 111, 666, 444, 222}