1、集合
与列表、字典一样,是可变的数据结构。
但是只有键,没有值,相当于是没有value的字典,字典是无序的,所以集合也是无序的。
2、集合的创建
#使用花括号创建
s1 = {"python","hello",98} #元组是小括号,列表是中括号,集合是大括号
s2 = {1,2,3,1,2,3}
print(s2) #输出:{1,2,3},因为集合中的元素不允许重复
#使用set()创建
s1 = set(range(6))
s2 = set([1,2,3,4,5,5]) #将列表转成集合
s3 = set((1,2,3,88,99,99)) #将元组转为集合
s4 = set("python")
print(s1) #输出:{0,1,2,3,4,5}
print(s2) #输出:{1,2,3,4,5},去掉重复的。
print(s3) #输出:{1,2,88,3,99},去掉重复的,元组内元素是无序存储的,所以输出时顺序会变动。
print(s4) #输出:{'n','h','p','y','t','o'},无序。
#创建空集合
s1 = {} #创建方式错误,输出的类型不是集合类型,而是字典类型。
s2 = set() #创建方式正确。
3、判断元素是否在集合内
s = {1,2,3,4,5}
print(1 in s)
print(1 not in s)
4、集合中元素的新增
s = {1,2,3,4,5}
s.add(9) #只能增加一个
s.update({6,7,8}) #能增加多个
s.update([10,11,12])
s.update((13,14,15))
5、集合中元素的删除
s = {1,2,3,4,5}
s.remove(2) #只能删除一个
s.remove(500) #会抛出异常
s.discard(500) #不会抛出异常
s.pop() #任意删除一个
s.clear() #清空集合
6、集合间的关系
#两个集合是否相等
s1 = {1,2,3,4}
s2 = {2,3,1,4}
print(s1=s2) #输出:True
#一个集合是否是另一个集合的子集
s1 = {1,2,3,4,5,6}
s2 = {2,3,4}
print(s2.issubset(s1)) #输出:True
#一个集合是否是另一个集合的超集
s1 = {1,2,3,4,5,6}
s2 = {2,3,4}
print(s1.issuperset(s2)) #输出:True
#两个集合是否含有交集
s1 = {1,2,3,4}
s2 = {3,4,5,6}
print(s1.isdisjoint(s2)) #输出:False,有交集则为False
7、集合的数学操作
#交集操作
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
print(s1.intersection(s2)) #输出:{2,3,4}
print(s1 & s2) #输出:{2,3,4}
#并集操作
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
print(s1.union(s2)) #输出:{1,2,3,4,5,6}
print(s1 | s2) #输出:{1,2,3,4,5,6}
#差集操作
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
print(s1.difference(s2)) #输出:{1}
print(s1-s2) #输出:{1}
#对称差集操作
s1 = {1,2,3,4}
s2 = {2,3,4,5,6}
print(s1.symetric_difference(s2)) #输出:{1,5,6}
print(s1^s2) #输出:{1,5,6}
8、集合生成式
#将列表中的中括号变成大括号即可,但列表是有序的,而集合是无序的。
lst = [i*i for i in range(6)]
s = {i*i for i in range(6)}
9、列表、字典、元组、集合总结
数据结构 | 是否可变 | 是否可重复 | 是否有序 | 定义符号 |
---|---|---|---|---|
列表(list) | 可变 | 可重复 | 有序 | [ ] |
字典(dict) | 可变 | 键不可重复,但值可以重复 | 无序 | {key:value} |
元组(tuple) | 不可变 | 可重复 | 有序 | ( ) |
集合(set) | 可变 | 不可重复 | 无序 | { } |