Why - 为什么要用set?
写了很多python的程序却很少用到set,因为list功能太强大,大多数时候都能用list解决,就没想到用set。实际上以后能用set最好用set。
做leetcode发现需要标记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