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('不在')

  

posted @ 2021-03-09 20:19  tonitaka  阅读(71)  评论(0)    收藏  举报