5.python-set
python-set
set 是一个不允许内容重复的组合,而且set里的内容位置是随意的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
1.set是一个无序不重复的序列
2.可以用 { } 或者 set( ) 函数创建集合
3.集合存放不可变类型(字符串、数字、元组)
注意:创建一个空集合必须用 set( ) 而不是 { } ,因为 { } 是用来创建一个空字典
创建
>>> set([1,2,3]) # list 转 set
{1, 2, 3}
>>> set('123') # str 转 list
{'1', '2', '3'}
>>> set()
set() #创建一个空set
增加删除
add()
方法:是把要传入的元素做为一个整个添加到集合中
>>> a = set()
>>> a.add('python')
>>> a
{'python'}
>>> a.add('love')
>>> a
{'love', 'python'}
>>> a.add('i')
>>> a
{'love', 'i', 'python'}
update()
方法:是把要传入的元素拆分,做为个体传入到集合中
>>> a = set('love')
>>> a
{'l', 'v', 'o', 'e'}
>>> a.update('python')
>>> a
{'h', 'y', 'e', 'n', 'o', 'p', 't', 'l', 'v'}
#update可以把多个集合添加到一个集合里面。
#可以iterar的数据都可以添加成set集合
a={"a","b","c"}
b={"a","wa"}
a.update(b)
a.update(["chen","da","ge"])
print(a)
remove()
集合删除操作方法,不存在会报错
>>> a = set(['i', 'love', 'python'])
>>> a
{'love', 'i', 'python'}
>>> a.remove('love')
>>> a
{'i', 'python'}
discard()
集合删除操作方法,不存不报错
res={'1','2'}
s=set(res)
s.discard('mm')
print(s) # {'1','2'}
pop(self)
# 随机删除集合中元素
# 返回值:返回在set中随机pop的元素。
>>> test = {1, 2, 3, 4}
>>> test.pop()
1 #输出结果
>>> test.pop()
2 #输出结果
>>> test.pop()
3 #输出结果
clear(self)
# 清空集合
两个集合比较
set.issubset(x)
判断一个集合是否是另一个集合的子集
s = set(('a', 'cc', 'f'))
s1 = {'a', 'f'}
print(s.issubset(s1))
print(s1.issubset(s))
False
True
set.issuperset()
判断一个集合是否是另一个集合的父级
b={1,23,5}
a={23,5}
#issuperset说明b是否是a的父亲,如果是true,如果不是false
ret=b.issuperset(a)
print(ret)
True
set.isdisjoint()
检测2个集合是否不存在交集 存在交集 False
# 如果不存在交集则返回True,存在则返回False。
s1 = {'ljl','wc','xy','zb','lsy'}
s2 = {'mmf','lsy','syj'}
s3 = {1, 2}
print(s1.isdisjoint(s2))
print(s1.isdisjoint(s3))
False
True
两个集合运算
交集
& set.intersection()
s1_set = {'a', 'cc', 'f'}
s2_set = {'a', 'f', 'aa', 'ww'}
# 同时在集合s 和 s1 中的元素
print(s1_set.intersection(s2_set))
print(s1_set & s2_set)
{'a', 'f'}
{'a', 'f'}
# 交集并更新
print(s1_set.intersection_update(s2_set))
{'a', 'f'}
并集
| set.union()
s1_set = {'a', 'cc', 'f'}
s2_set = {'a', 'f', 'aa', 'ww'}
# 集合s 和 s1 中的所有元素
print(s1_set.union(s2_set))
print(s1_set | s2_set)
{'cc', 'ww', 'f', 'aa', 'a'}
{'cc', 'ww', 'f', 'aa', 'a'}
# 取两者的交集,intersection_update会改变b的内容
print(s1_set.intersection_update(s2_set))
{'cc', 'ww', 'f', 'aa', 'a'}
差集
- set.difference()
s1_set = {'a', 'cc', 'f'}
s2_set = {'a', 'f', 'aa', 'ww'}
# 在 s1 但是 不在 s2
res1_set=s1_set.difference(s2_set)
res=s1_set-s2_set
print(res1_set)
print(s1_set)
print(s2_set)
print(res)
# 在 s1 但是 不在 s2 并更行 s1
s1_set.difference_update(s2_set)
print(s1_set)
{'cc'}
{'cc', 'f', 'a'}
{'ww', 'aa', 'f', 'a'}
{'cc'}
{'cc'}
补集
sysmmetric_difference()
s = set(('a', 'cc', 'f'))
s1 = {'a', 'f', 1, 'ww'}
# 除集合s和集合s1共有的以外的元素
print(s.symmetric_difference(s1))
print(s1^s)
{1, 'ww', 'cc'}
{1, 'ww', 'cc'}
其他
len(set)
集合元素个数
set.copy(self)
复制