概念
- 一种内置数据结构
- 与列表、字典一样是可变类型数据结构
- 类似字典使用大括号,但是没有value仅有key
- 使用哈希函数确定位置,所以具有无序性
创建方式
直接方法
创建的元素不允许重复,有重复也只保留一个
s={98,'asd',False,98,10}
print(s)
使用set() 函数
s1=set([22,33,44,55,22,66]) #中括号是列表,将列表转换成集合,去掉重复元素
print('s1: ',s1)
s2=set((11,22,33,44,55,22,33)) #括号是元组,将元组转换集合
print('s2: ',s2)
s3=set('python') #将字符串转换成集合,各字符通过哈希函数,无序
print('s3: ',s3)
s4=set({11,22,33,44,22,33}) #将一个集合转换成集合
print('s4: ',s4)
如注释所言↑
声明空集合
不能直接用大括号定义: s5={ }
是错误的
需要用s5 = set()
集合的相关操作
判断操作
直接用 in 和 not in
print ( 11 in s2 )
增加操作
- add() 添加一个元素
s2.add(80)
print(s2)
- update() 添加至少一个元素
多种情况:
s2.update({200,300}) #添加集合
print(s2)
s2.update([222,333]) #添加列表
print(s2)
s2.update(('asd',555)) #添加元组
print(s2)
删除操作
- remove( )删除一个指定元素,若不存在会报错
- discard( ) 方法,删除一个指定元素,若不存在不会报错
- pop()操作,随机删除一个元素
随机删除了元素:0
- clear()清除整个集合
集合之间的关系
-
两个集合如果元素相同则集合相同,顺序无所谓
-
一个集合是否是另一个的子集
s.issubset( )
函数
s3={'asd',33,22,11}
w=s3.issubset(s2) #s3是s2的子集吗
print(w)
- 一个集合是否是另一个集合的超集(A是B的子集,则B就是A的超集)
s.issuperset( )
s3={'asd',33,22,11}
w=s2.issuperset(s3) #s2是s3的超集吗
print(w)
- 两个子集是否无交集
s1.isdisjoint(s2)
s2={0, 200, 11, 333, 22, 'asd', 222, 33, 555, 300, 44, 55}
s3={'asd',33,22,11}
w=s2.isdisjoint(s3) #s2与s3无交集吗
print(w)
输出:False
集合的数学操作
交集
s1.intersection(s2)
,获取集合S1和S2的交集
或者s1 & s2
获取交集
s1={11,22,33,44}
s2={22,33,44,55}
print(s1.intersection(s2)) # {33, 44, 22}
print(s1 & s2) # {33, 44, 22}
并集
s1.union(s2)
,获取集合S1和S2的并集
或者s1 | s2
获取交集
s1={11,22,33,44}
s2={22,33,44,55}
print(s1.union(s2)) # {33, 11, 44, 22, 55}
print(s1 | s2) # {33, 11, 44, 22, 55}
差集操作
就是一个集合减去与另一个集合的交集
s1.difference(s2)
,获取集合S1和S2的并集
或者s1 - s2
获取交集
s1={11,22,33,44}
s2={22,33,44,55}
print(s1.difference(s2)) # {11}
print(s1 - s2) # {11}
对称差集
就是两个集合的并集减去两个的交集
s1.symmetric_difference(s2)
,获取集合S1和S2的并集
或者s1 ^ s2
获取交集
s1={11,22,33,44}
s2={22,33,44,55}
print(s1.symmetric_difference(s2)) # {11, 55}
print(s1 ^ s2) # {11, 55}
集合生成式
s={i*i for i in range(10)}
, 使用花括号
print(('----------集合生成式----------------'))
list=[i*i for i in range(10)] #方括号,生成列表
print(list)
s={i*i for i in range(10)} #花括号,生成集合
print(s)
列表是有序的,集合是将值hash后的
列表、字典、元组、集合总结
- 仅元组不可变