Why - 為什么要用set?
寫了很多python的程序卻很少用到set筐摘,因為list功能太強大分瘦,大多數(shù)時候都能用list解決骄恶,就沒想到用set。實際上以后能用set最好用set梅忌。
做leetcode發(fā)現(xiàn)需要標記visited,直接訪問過的元素丟到集合set里除破,再次訪問element是否in集合set來判斷是否visited或者立個visited flag也可以牧氮。
What - 什么是set?
python中set是一個無序 不重復(fù)元素集;基礎(chǔ)功能包括關(guān)系測試membership和消除重復(fù)元素瑰枫。
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([]) 用于增加多個元素值性含,參數(shù)為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.包含關(guān)系
兩個集合之間一般有三種關(guān)系叠萍,相交、包含绪商、不相交苛谷。在Python中分別用下面的方法判斷:
- set.isdisjoint(s):判斷兩個集合是不是不相交
- set.issuperset(s):判斷集合是不是包含其他集合,等同于a>=b
- set.issubset(s):判斷集合是不是被其他集合包含格郁,等同于a<=b