set是python基础数据类型,容器型(数组、字典、元组)。它要求它里面的元素是不可变(可哈希)的数据类型(int、str、bool等),但是本身又是可变的数据类型。集合是无序的
集合的作用:
列表去重
关系测试: 交集,并集,差集
创建
1、第一种
s1=set() #创建一个空集合
2、第二种
s2={11,22,33,44} #有点像字典的key,如果s2={} 就是一个空的字典
增加和更新
>>>s1={“ss”}
>>> s1.add(11)
>>> s1
set([11,”ss”])
#迭代增加,去重后依次增加
s1.update(“abcd”)
>>> s1
set([11,”ss”,”a”,”b”,”c”,”d”])
>>> a.update([11,123,456,789]) # 循环列表然后把数据增加进去
>>> a
set([33, 456, 11, 44, 789, 22, 55, 123])
删除
s1.clear() 清空整个集合
s1.remove(11) 删除元素
s1.pop()随机删除
修改
这里只能变相处理,先remove元素在add添加元素
更新集合(B集合保留A集合中没有的元素)
>>> a={11,22,33}
>>>b={33, 44, 22}
>>> b.difference_update(a)
>>> b
set([44])
删除一个指定集合元素,指定元素没有不报错
>>> a={11,22,33}
>>> a.discard(11)
>>> a
set([33, 22])
删除指定元素,没有报错
set([33, 22])
>>> a.remove(33)
>>> a
set([22])
交集
>>> b={11,22,33,44}
>>> a={22,55,66}
>>> b.intersection(a)
set([22])
也可以写成 b & a
并集
>>> a={11,22,33,44,55}
>>> b={22,77,88,11}
>>> a.union(b)
set([33, 11, 44, 77, 22, 55, 88])
也可以写成 b | a
差集
>>> a
set([33, 11, 44, 22])
>>> b
set([66, 11, 22, 55])
>>> a.symmetric_difference(b)
set([33, 66, 44, 55])
也可以写成a – b
查找a集合中的差集
>>> a={11,22,33}>>> b={22,33,44}
>>> a.difference(b) #查找A比B多的
set([11])
>>> b.difference(a) #查找B比A多的
set([44])
如果没有交集返回true,有交集返回falsse
>>> b={11,22,33,44}
>>> a={22}
>>> b.isdisjoint(a)
False
子序列(子集)和父序列(超集)
>>> a={11,22,33,44} #a集合包含b集合的所有元素
>>> b={11,22}
判断A是否是B的子序列,B不包含A所以不是
>>> a.issubset(b)
False
判断A是B的父序列,A包含B的所有值所以A是B的父序列
>>> a.issuperset(b)
True
也可以用下面的方式:
a > b判断 a是不是b的超集
b < a 判断 b是不是a的子集