集合 set
一:基本概念
1.1 定义
set存储元素不重复、无序数据类型。
1.2 初始化集合
1.2.1 初始化空集合或带值集合: 集合名=set( [ ] )
1.2.2 初始化空集合: 集合名=set()
1.2.2 初始化包含值的集合: 集合名={数据1,数据2}
emptySet=set()
emptySet=set([])
date=set(['a','b','c','d'])
date={'a','b','c','d'}
二:集合的特性
2.1 去重
使用集合快速删除列表中的重复值
listname=[1,2,3,1,4,3,2,5]
print(list(set(listname))) ##列表转化为集合类型,去重后再转换为列表类型
2.2 成员操作符
集合只支持成员操作符、for循环迭代、枚举
不支持索引,重复,连接,切片。
##无序的数据类型,添加顺序和在集合中的存储顺序不一样
setname={1,2,3}
print(i in setname)
print(4 not in setname) ##返回Ture 或 False
2.3 for循环
setname={1,2,3}
for i in setname:
print(i,end='\t')
2.4 枚举
返回对应元素及其索引值
三:常用方法
3.1 增
添加顺序与存储顺序不同
3.1.1 添加一个不可变元素:——集合名.add(x)
若集合中不存在x,则将x添加到集合中;若x已存在,不会报错。
x只能为不可变的值(字符串或元组),若x为list,则返回TypeError
3.1.2 添加多个元素:——集合名.update([x1,x2,x3])
s={1,2,3}
s.add(1) #已存在,但不报错
s.add('a')
s.update([3,4,5]) #添加多个元素
3.2 删
3.2.1 remove方法: ——集合名.remove(value)
从集合中删除一个指定元素,若value不存在,则返回keyerror 异常
3.2.2 pop方法:——集合名.pop()
随机删除集合中的一个元素并返回该值,若集合为空,则产生keyerror异常
3.2.3 discard方法:——集合名.discard(value)
从集合中删除一个元素,若value不存在,不会报错
3.2.4 clear方法:——集合名.clear()
删除集合中的所有值
s={1,2,3,4}
s.remove(1)
s.remove('a') #keyerror异常
print(s.pop()) #随机删除一个并返回
print(s)
s1=set() #创建空集合
print(s1.pop()) #返回异常,KeyError: 'pop from an empty set'
s.discard('a') #不会返回异常
s.clear() #清空集合
3.3 排序
3.3.1 升序:sorted(集合名)
3.3.2 降序:sorted(集合名,reverse=Ture)
s={1,3,2}
sorted(s) #输出{1,2,3}
date={'a','e','t'}
sorted(date,reverse=True) #按字母降序排列,输出{'t','e','a'}
3.4 关系测试
3.4.1 并集
union() 函数——将集合a和集合b取并集,并将并集作为一个新的集合返回,但不改变原集合a,b。语法如下:
集合1.union(集合2,集合3)
集合1 | 集合2 | 集合3
update()函数——将集合a和集合b取并集,并将结果保存在集合a中(即更新集合a),集合b不改变,但是没有返回值。或 将x中的所有项添加到集合a中。x可以是 集合,列表,元组,字典等或者支持迭代的所有对象。
集合1.update(集合2,集合3)
集合1.update(x)
a={1,2,3}
b={'hu','ki'}
c={1,2,'li'}
print(a.union(b)) #返回a和b的并集
print(a.union(b,c)) #返回a,b,c的并集
print(a.update(b)) #返回值为空
print(a) #a被更新
print(b) #b不变
a.update(b,c) #a被更新,b,c不变
x=[1,2,'s'] #列表
y={'li':4,'hi':55} #字典,####字典类型作用的是key值
z=('44','d') #元组
a.update(c,x,y,z) #分别将集合,列表,字典,元组添加到集合a中
3.4.2 交集
intersection()函数——属于集合A且属于集合B的元素,即A∩B。取交集并作为一个新集合返回,但不改变原集合的元素。
集合1.intersection(集合2,集合3)
intersection_update()函数——把集合a更新为集合a与集合b(或多个集合)的交集,但集合b(其它集合)的元素不改变,且返回值为空。或 计算集合s与x的交集,并将结果保存在集合s中。x可以是 集合,列表,元组,字典等或者支持迭代的所有对象。
集合1.intersection_update(集合2,集合3)
集合1.intersection_update(列表,元组,字典,集合)
a={1,2,'s',55}
b={4,2,'s',67}
x=a.intersection(b) #返回集合a,b的交集
print(x)
print(a,b) #集合a,b不改变
a.intersection_update(b)
print(a.intersection_update(b)) #返回值为空
print(a) #集合a更新为交集
print(b) #集合b不变
3.4.3 差集
difference() 函数——所有属于集合a但不属于集合b的元素,{x|x∈a,且x∉b}等效与a-b。将两集合取差集并返回差集,但各集合并不改变。
集合1.difference(集合2,集合3,集合4)
difference_update()函数——把集合a更新为集合a与集合b的差集。集合a元素被更新改变,但集合b元素不改变,无返回值 或 从集合s中删除同时也在x中出现的所有元素。x可以是 集合,列表,元组,字典等或者支持迭代的所有对象。
集合1.difference_update(集合2,集合3,集合4)
集合1.difference_update(元组,列表,字典,集合)
a={1,2,'hu','ge'}
b={2,6,7,'hu','hy'}
x1=a.difference(b) #返回集合a-集合b
x2=b.difference(a) #返回集合b-集合a
print(x1)
print(x2)
print(a,b) #集合a,b不变
a.difference_update(b)
print(a.difference_update(b)) #返回值为空
print(a) #集合a更新为a,b的差集
print(b) #集合b不改变
3.4.4 对称集
symmetric_difference()函数——返回对称差集(反向交集),即返回两个集合中不重复的元素集合,即移除两个集合中都存在的元素,但不改变原集合元素。A ^ B=(A-B)∪(B-A)
集合1.symmetric_difference(集合2)
symmetric_difference_update()函数——把集合a更新为集合a与集合b的对称差集。集合a元素被更新改变,但集合b元素不改变,且返回值为空。 或 计算集合s与x的对称差集,并将结果保存在集合s中。x可以是 集合,列表,元组,字典等或者支持迭代的所有对象。
集合1.symmetric_difference_update(集合2,集合3)
集合1.symmetric_difference_update(x) (括号中只能是一个对象)
x=a.symmetric_difference(b) #返回a,b的对称差集
print(x1)
print(a,b) #集合a,b不改变
a.symmetric_difference_update(b)
print(a.symmetric_difference_update(b)) #返回值为空
print(a) #集合a更新
print(b) #集合b不变
l=[1,2,'yu']
t=('88','ki')
d={2:'hu',6:'ji'}
a.symmetric_difference_update(l)
a.symmetric_difference_update(y)
3.4.5 子父集
issubset()函数——判断两个集合是否是子集关系(A⊆B)。即判断集合1中的所有元素是否都包含在集合2中,若都包含在集合2中则返回True,否则返回False。
集合1.issubset(集合2)
issuperset()函数——判断两个集合是否是超集(父集)。即判断集合2中的所有元素是否都包含在集合1中,若都包含在集合1中则返回True,否则返回False。
集合1.issuperset(集合2)
a = {1,2,3,"a"}
b = {1,2,3,"a","b","c"}
c = {1,2,3,"b","h"}
print(a.issubset(b)) #集合a是集合b的子集
print(a.issubset(c)) #集合a不是集合b的子集
print(a.issuperset(b)) #集合a是集合b的超集.
print(a.issuperset(c)) #集合a不是集合b的超集。
3.4.6 判断相交
isdisjoint()函数——判断两个集合是否包含相同的元素,若没有相同元素则返回 True,否则返回 False。
集合1.isdisjoint(集合2)