09、集合set
集合(set)
集合是一个无序、可变、不允许数据重复的容器
s = {11,22,33,'ccc'}
- 无序,无法通过索引取值
- 可变,可以添加和删除元素
s = {11,22,33,44}
s.add(999)
print(s) #{33, 999, 11, 44, 22}
- 不允许数据重复
s = {11,22,33,44,55,33,44}
print(s) #{33, 11, 44, 22, 55}
一般什么时候用集合呢?就是想要维护一大堆的不重复的数据的时候。
- 定义空集合时,只能使用set(),不能用{}
独有功能
添加元素
data = {'小明','晓虹','小白'}
data.add('小青')
print(data) #{'小青', '小明', '晓虹', '小白'}
删除元素
data = {'小明','晓虹','小白'}
data.discard('小白')
print(data) #{'小明', '晓虹'}
交集
- 两个集合之间,找相同的元素
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 & s2
s4 = s1.intersection(s2)
print(s3,s4) #{'小白'}
并集
- 两个集合,合并在一起,重复的元素仅留一个
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 | s2
s4 = s1.union(s2)
print(s3,s4) #{'晓虹', '晓晓', '大白痴', '小明', '小白'}
差集
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 - s2
s4 = s1.difference(s2)
print(s3,s4) #{'小明', '晓虹'}
#两个集合,s1中有的且s2中没有的值
s3 = s2 - s1
s4 = s2.difference(s1)
print(s3,s4) #{'晓晓', '大白痴'}
#两个集合,s2中有的且s1中没有的值
公共功能
减,计算差集
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 - s2
print(s3) #{'小明', '晓虹'}
&,计算交集
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 & s2
print(s3) #{'小白'}
|,计算并集
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 | s2
print(s3) #{'晓虹', '晓晓', '大白痴', '小明', '小白'}
长度
s = {'小明','晓虹','小白'}
data = len(s)
print(data) #3
for循环
s = {'小明','晓虹','小白'}
for item in s:
print(item)
转换
- int/list/tuple/dict都可以通过set()转换为集合
s1 = '大丈夫' s2 = set(s1) print(s2) #{'夫', '丈', '大'} s1 = {11,22,33,44,22,11} s2 = set(s1) print(s2) #{33, 11, 44, 22} s1 = (11,22,33,44,22,11,) s2 = set(s1) print(s2) #{33, 11, 44, 22}
元素必须可哈希
集合的元素只能是int,bool,str,tuple,而list,set是不可哈希的
- 转换成功
s1 = [11,22,33,44,11,3,99,22] s2 = set(s1) print(s2) #{33, 3, 99, 11, 44, 22}
- 转换失败
s1 = [11,22,['阿斯顿','大扫荡'],33] s2 = set(s1) print(s2)
集合查找速度特别
- 低效率
list = ['阿斯顿','打底衫','小明'] if '小明' in list: print('在') else: print('不在') tuple = ('阿斯顿', '打底衫', '小明',) if '小明' in tuple: print('在') else: print('不在')
- 高效率
set = {'阿斯顿','打底衫','小明'}
if '小明' in set:
print('在')
else:
print('不在')

浙公网安备 33010602011771号