首页 > 代码库 > python-set集合

python-set集合

简介

set是一个无序且不重复的元素集合

s1=set()                   #创建一个空的set集合
s2=set(‘python‘)           #创建一个非空的set集合
print (type(s1))

-----结果-----
<type ‘set‘>

注意:如果想要在set集合中加入多个元素,不可使用set(‘python‘,‘java‘),应该用一个列表的形式加入,如:

s1=set([‘java‘,‘java‘,‘python‘])
print (s1)

-----结果-----
{‘java‘, ‘python‘}       #set中把‘java‘去重

在set这个类中,有以下几种方法:

技术分享

 

一、添加add()

s1=set()
s1.add(‘python‘)
print (s1)
s1.add(‘python‘)
print (s1)
s1.add(‘c‘)
print (s1)

-----结果----
{‘python‘}           
{‘python‘}                  #set是一个不重复的集合,第二次添加的时候不会再次插入
{‘c‘, ‘python‘}

  

 

二、清空clear()

s1=set()
s1.add(‘python‘)
s1.clear()
print (s1)

-----结果-----
set()

  

三、拷贝copy()

s1=set()
s1.add(‘python‘)
s2=s1.copy()
print (s2)

-----结果-----
{‘python‘}

 

四、对比difference()与difference_update

difference()的作用是把两个set集合进行对比,把对比的结果放入到一个新的集合中,如

s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=s1.difference(s2)
print(s3)

-----结果-----
{‘python‘}

注意:使用difference()时,两个集合比较,只会把前一个集合中存在且后一个集合中不存在的元素放入一个新集合中

 

difference_update()简单地说,就是两个集合比较,在第一个集合中,去除两个集合相同的部分。此方法是在第一个集合中操作,不会重新产生一个新的集合

s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=s1.difference_update(s2)
print (s1)
print (s3)

-----结果-----
{‘python‘}
None

 

五、移除discard()、pop()、remove()

区别:

  discard(x):从集合中删除元素x,如存在,则删除,如不存在,则不做操作

  pop():从集合中删除一个元素,且可把删除的元素重新赋值给一个新变量

  remove(x):从集合中删除元素x,如存在,则删除,如不存在,则报错

#discard()
s1=set([‘python‘,‘java‘])
s1.discard(‘java‘)
print (s1)
-----结果-----
{‘python‘}


#pop()
s1=set([‘python‘,‘java‘])
s2=s1.pop()
print (s1)
print (s2)
-----结果-----
{‘java‘}
python


#remove
s1=set([‘python‘,‘java‘])
s1.remove(‘java‘)
print (s1)
-----结果-----
{‘python‘}

  

六、取交集intersection()与intersection_update()

#intersection()
s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=s1.intersection(s2)
print (s1)
print (s2)
print (s3)
-----结果-----
{‘python‘, ‘java‘}
{‘java‘, ‘c‘}
{‘java‘}


#intersection_update()
s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=s1.intersection_update(s2)
print (s1)
print (s2)
print (s3)
-----结果-----
{‘java‘}
{‘c‘, ‘java‘}
None

intersection()与intersection_update()的区别同样在于是否会生成一个新的集合

 

七、判断是否有交集isdisjoint()

s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
print (s1.isdisjoint(s2))           #如果没有交集,会返回True

-----结果-----
False                   

 

八、判断是否是子集issubset()

s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=set([‘java‘])                     #注意此处不能写s3=set(‘java‘)
print (s2.issubset(s1))
print (s3.issubset(s1))

-----结果-----
False
True

 

九、判断是否是父集issuperset()

s1=set([‘java‘,‘python‘])
s2=set([‘java‘,‘c‘])
s3=set([‘java‘])
print (s1.issuperset(s2))
print (s1.issuperset(s3))

-----结果-----
False
True

 

十、差集ymmetric_difference()与ymmetric_difference_update()

#symmetric_difference
s1=set([‘python‘,‘java‘])
s2=set([‘python‘,‘c‘])
s3=s1.symmetric_difference(s2)
print (s1)
print (s2)
print (s3)
-----结果-----
{‘java‘, ‘python‘}
{‘c‘, ‘python‘}
{‘c‘, ‘java‘}


#symmetric_difference_update
s1=set([‘python‘,‘java‘])
s2=set([‘python‘,‘c‘])
s3=s1.symmetric_difference_update(s2)
print (s1)
print (s2)
print (s3)
-----结果-----
{‘java‘, ‘c‘}
{‘python‘, ‘c‘}
None

两者的区别还是在是否会生成一个新的集合

 

十一、并集union()

s1=set([‘python‘,‘java‘])
s2=set([‘python‘,‘c‘])
s3=s1.union(s2)
print (s1)
print (s2)
print (s3)

-----结果-----
{‘python‘, ‘java‘}
{‘python‘, ‘c‘}
{‘c‘, ‘python‘, ‘java‘}

 

十二、更新update()

s1=set([‘python‘,‘java‘])
s2=set([‘python‘,‘c‘])
s3=s1.update(s2)
print (s1)
print (s2)
print (s3)

-----结果-----
{‘python‘, ‘java‘, ‘c‘}
{‘python‘, ‘c‘}
None

 

python-set集合