Why - 為什么要用set?
寫了很多python的程序卻很少用到set,因為list功能太強大,大多數時候都能用list解決,就沒想到用set。實際上以后能用set最好用set。
做leetcode發(fā)現需要標記visited,直接訪問過的元素丟到集合set里,再次訪問element是否in集合set來判斷是否visited或者立個visited flag也可以。
What - 什么是set?
python中set是一個無序 不重復元素集;基礎功能包括關系測試membership和消除重復元素。
set的功能類似于dict和list的中間體,sets 支持 x in set、 len(set)、和 for x in set,使用這些功能時使用set比list好。
集合set的基本操作
1.初始化
list用 [ ], set,dictionary用 { }
>>>set('hello')
set(['h', 'e', 'l', 'o'])
>>>{'h','e','l','o'}
set(['h', 'e', 'l', 'o'])
>>> test = set()
2.增刪
- add(x) 用于增加一個元素值
>>>test.add(1)
- update([]) 用于增加多個元素值,參數為list.
>>>test.update([1,2,3])
- discard(x) 刪除單個元素 (不會拋出異常)
>>>test.discard(1)
- remove(x) 刪除單個元素 (x不在,會拋出KeyError錯誤)
>>>test.remove(1)
3.集合操作
- 并集:set.union(s),也可以用a|b計算
- 交集:set.intersection(s),也可以用a&b計算
- 差集:set.difference(s),也可以用a-b計算
4.包含關系
兩個集合之間一般有三種關系,相交、包含、不相交。在Python中分別用下面的方法判斷:
- set.isdisjoint(s):判斷兩個集合是不是不相交
- set.issuperset(s):判斷集合是不是包含其他集合,等同于a>=b
- set.issubset(s):判斷集合是不是被其他集合包含,等同于a<=b