集合

集合是可变数据类型,集合是没有value的字典。
存储单个元素,集合中的元素不允许重复,无序。

一、创建集合

(1)使用{}

#代码
s={1,2,4,6,2,1,64}#存储单个元素 集合中的元素不允许重复 无序
print(s)
#结果
{64, 1, 2, 4, 6}

(2)内置函数set()

#使用内置函数set()
s1=set(range(6))
print(s1,type(s1))
#结果
{0, 1, 2, 3, 4, 5} <class 'set'>

(3)将其他数据类型转换成集合

将列表转成集合

#将列表转成集合,同时去掉重复元素
s2=set([23,45,345632,45,3])
print(s2,type(s2))
#结果
{345632, 3, 45, 23} <class 'set'>

将元组转成集合

#元组
s3=set((23,456,1,35))
print(s3,type(s3))
#结果
{456, 1, 35, 23} <class 'set'>

将字符串转成集合

#字符串序列
s4=set('python')
print(s4,type(s4))
#结果
{'n', 'y', 'p', 'h', 'o', 't'} <class 'set'>

集合转集合

#集合转集合
s5=set({34,65,25,34,3,25})
print(s5,type(s5))
#结果
{65, 34, 3, 25} <class 'set'>

定义一个空集合
直接用{},会定义成空字典,所以用内置函数定义

#定义一个空集合
s6={} #dict字典类型
print(type(s6))

s7=set()
print(type(s7))
#结果
<class 'dict'>
<class 'set'>

二、集合的相关操作

(1)判断操作

#代码
s={10,20,30,40,50,60}
print(10 in s)
print(10 not in s)
#结果
True
False

(2)新增

两种方式

① add()

一次添加一个元素,无序,加在任意位置

s.add(80)
print(s)
②update()

一次至少添加一个
可以把集合、列表、元组都添加进去

#一次至少添加一个
s.update({90,34})
print(s)
s.update([78,45,23])
s.update((23,249,23))
print(s)

(3)删除

① remove()

一次删除一个元素,删除一个不存在的元素时,会抛出异常

s.remove(78)
#s.remove(555555) KeyError: 555555  删除一个没有的会抛出异常
② discard()

一次删除一个元素,删除一个不存在的元素时,不会抛出异常

s.discard(555555)  #删除一个没有的不会抛出异常
s.discard(45)
③ pop()

随便删除一个元素,不可以指定参数

s.pop()
④ clear()

清空集合当中的元素

s.clear() #清空集合当中的元素

三、集合之间的关系

(1)判断两个集合是否相等

元素相同,就相等

s={10,20,30,40}
s2={20,30,40,50}
print(s==s2)
print(s!=s2)

False
True

(2)判断一个集合是否是另一个集合的子集

s1={10,20,30,40,50,60,70,80,90}
s2={10,20}
s3={34,65}
print(s2.issubset(s1))
print(s3.issubset(s1))

(3)判断一个集合是否是另一个集合的超集

print(s1.issuperset(s2))
print(s1.issuperset(s3))

(4)判断两个集合是否有交集

print(s2.isdisjoint(s3))

四、集合的数学操作

(1)交

两种方式

s1={10,20,30,40}
s2={20,30,40,50,60}
print(s1.intersection(s2))
print(s1 & s2)

(2)并

两种方式,会去掉重复元素

print(s1.union(s2)) #去掉重复元素
print(s1 | s2)

(3)差

两种方式

print(s1.difference(s2))
print(s1-s2)
print(s2.difference(s1))

(4) 对称差

两种方式,去掉两个集合都有的元素

print(s1.symmetric_difference(s2))
print(s1^s2)

五、集合生成式

元组是不可变序列,所以元组没有生成式

#列表生成式
lst=[i*i for i in range(6)]
print(lst)

#集合生成式 将方括号改成花括号
s={i*i for i in range(6)}
print(s)