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) 复制

posted @ 2021-07-09 18:10  贝壳里的星海  阅读(65)  评论(0编辑  收藏  举报