Python-集合

集合又是何方神圣?集合也是一个容器类的数据类型。但是有了列表和元组怎么又出现了一个集合?

介绍一下集合的特点:

  1. 集合是一个可变容器,就是支持里面元素的变化

  2. 集合内的数据对象都是唯一的(不能重复)

  3. 集合是无序的存储结构,集合内的数据没有先后关系

  4. 集合是可迭代对象

  5. 集合的底层是字典结构

集合到底长成啥样子呢?定义方式:

空集合:set1 = set()

有元素的集合:set1 ={'足球','篮球','网球','乒乓球','排球' }

可以发现符号发生了变化,再次与列表和元组一起对比学习下:

名称符号空元素数据类型是否可改(增加、删除、修改)是否允许重复是否支持索引符号支持
列表[ ]方括号list1=[]<class 'list'>可以允许支持+ * in
元组()小括号tuple1=()<class 'tuple'>不可以允许支持+ * in
集合{}大括号set1=set()<class 'set'>可以不允许不支持&|-^in
sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
print(type(sports))
print(len(sports))  #同样适用len()获取长度
print(sports) # 注意里面只有一个篮球和网球,即不允许重复元素

集合操作

注意:因为不支持索引,所以索引相关的操作是不存在的。但是集合可以求交集、并集、差集、交叉补集

添加元素: set.add()

add():向集合内增加元素,如果添加的元素已经存在的话,则不执行任何操作

sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
sports.add('冰球')
print(sports)

sports.add('篮球')
print(sports)

删除集合元素:set.pop() 与 set.remove()

pop(): pop会从集合中随机删除一个数

remove(): 删除指定元素,如果是不存在的元素会报错。

discard(): 与remove()类似,如果是不存在的元素不会报错。

sports ={'足球','篮球','网球','乒乓球','排球','篮球','网球' }
sports.pop()  # pop会从集合中随机删除一个数
print(sports)

sports.remove('篮球')
print(sports)

sports.remove('冰球')
print(sports)

集合的运算操作

交集: 交集可以使用符号:【&】完成。跟数学中的交集是一样的,就是求两个集合中共同都有的元素

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1&sports2)

结果:

{'篮球', '乒乓球', '网球'}

并集:并集可以使用符号:【|】完成,就是将两个集合并在一起。

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1|sports2)

结果:

{'冰球', '篮球', '网球', '足球', '排球', '乒乓球'}

差集:差集使用符号:【-】完成,就是求当前与另一个集合不同的。

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1-sports2)  # 就是求sports1与sports2不同的是

结果:

{'足球'}

交叉补集:

理解下交叉补集:集合A 是{1、2、3 },集合B 是 {2、3、4 } . 交叉补集就只保留 1 和 4 。因为 1 是 A 独有的, 4 是B 独有的。交叉补集会去掉共有的部分,只保留双方独有的部分。

现在我们求sports1和sports2的交叉补集,使用符号是:【^】完成。

sports1 ={'足球','篮球','网球','乒乓球'}
sports2= {'乒乓球','排球','篮球','网球','冰球'}
print(sports1^sports2)  

结果:

{'冰球', '足球', '排球'}

当然每个符号也有对应的集合函数。

符号函数
&set1.intersection(set2)求set1和set2的交集
|set1.union(set2) 求set1和set2的并集
-set1.difference(set2) 求set1和set2的差集
^set1.symmetric_difference(set2) 求set1和set2的交叉补集
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值