码迷,mamicode.com
首页 > 其他好文 > 详细

集合set 的知识点

时间:2018-09-18 19:55:18      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:重复   特性   diff   type   sub   linux   添加   lin   lsb   

1. 什么是集合
在{}内用逗号分隔开多个值,集合的特点:
1. 每个值必须是不可变类型
2. 集合无序
3. 集合内元素不能重复
# s={1,1.3,‘aa‘,[1,2,]}#报错,集合当中的[1,2,]是列表,可变类型,不能存放在集合中
s={1,1.3,aa}
print(s,type(s))
#{1, ‘aa‘, 1.3} <class ‘set‘>
#集合的去重功能,元素在集合中必须是唯一的
s={1,1,1,1,1,1,1,2} #s=set(....)
print(type(s))
print(s)
#<class ‘set‘>
#{1, 2}

2. 为何要用集合
1. 用于做关系运算
  关系运算包含交集,并集,差集,交叉补集
  交集:
pythons={egon,张铁蛋,李铜蛋,赵银弹,王金蛋,艾里克斯}
linuxs={欧德博爱,李铜蛋,艾里克斯,lsb,ysb,wsb}

# 1 求同时报名两门课程的学生姓名:交集
print(pythons & linuxs)
print(pythons.intersection(linuxs))#了解知识点
#
#{‘李铜蛋‘, ‘艾里克斯‘}
#{‘李铜蛋‘, ‘艾里克斯‘}
并集:
pythons={egon,张铁蛋,李铜蛋,赵银弹,王金蛋,艾里克斯}
linuxs={欧德博爱,李铜蛋,艾里克斯,lsb,ysb,wsb}
# 2 求报名老男孩学校课程的所有学生姓名:并集
print(pythons | linuxs)
print(pythons.union(linuxs))

#{‘李铜蛋‘, ‘ysb‘, ‘egon‘, ‘欧德博爱‘, ‘wsb‘, ‘王金蛋‘, ‘赵银弹‘, ‘艾里克斯‘, ‘张铁蛋‘, ‘lsb‘}
#{‘李铜蛋‘, ‘ysb‘, ‘egon‘, ‘欧德博爱‘, ‘wsb‘, ‘王金蛋‘, ‘赵银弹‘, ‘艾里克斯‘, ‘张铁蛋‘, ‘lsb‘}

差集:

pythons={egon,张铁蛋,李铜蛋,赵银弹,王金蛋,艾里克斯}
linuxs={欧德博爱,李铜蛋,艾里克斯,lsb,ysb,wsb}

# 3 求只报名python课程的学生姓名: 差集
print(pythons - linuxs)
print(pythons.difference(linuxs))
print(linuxs - pythons) #求只报名linux课程的学生姓名
print(linuxs.difference(pythons))
#{‘张铁蛋‘, ‘赵银弹‘, ‘egon‘, ‘王金蛋‘}
#{‘张铁蛋‘, ‘赵银弹‘, ‘egon‘, ‘王金蛋‘}
#{‘ysb‘, ‘wsb‘, ‘欧德博爱‘, ‘lsb‘}
#{‘ysb‘, ‘wsb‘, ‘欧德博爱‘, ‘lsb‘}

对称差集

pythons={egon,张铁蛋,李铜蛋,赵银弹,王金蛋,艾里克斯}
linuxs={欧德博爱,李铜蛋,艾里克斯,lsb,ysb,wsb}
# 4 求没有同时报名两门课程的学生姓名: 对称差集
print((pythons - linuxs) | (linuxs - pythons))
print(pythons ^ linuxs)
print(pythons.symmetric_difference(linuxs))

#{‘lsb‘, ‘赵银弹‘, ‘王金蛋‘, ‘欧德博爱‘, ‘ysb‘, ‘张铁蛋‘, ‘wsb‘, ‘egon‘}
#{‘lsb‘, ‘王金蛋‘, ‘ysb‘, ‘wsb‘, ‘egon‘, ‘赵银弹‘, ‘欧德博爱‘, ‘张铁蛋‘}
#{‘lsb‘, ‘王金蛋‘, ‘ysb‘, ‘wsb‘, ‘egon‘, ‘赵银弹‘, ‘欧德博爱‘, ‘张铁蛋‘}
父子集:指的是一种包含与被包含的关系
s1={1,2,3}
s2={1,2}
print(s1 >= s2)#True 那么说s1是s2的父集
print(s1.issuperset(s2))#issuperset 判断父集
print(s2.issubset(s1))#issubset 判断子集 
    2. 去重
去重有一定的限制:
集合去重的局限性:
1. 会打乱原值的顺序
2. 只能针对不可变的值去重
集合需要掌握的操作
update 更新操作
s1={1,2,3}
s1.update({3,4,5})
print(s1)
#更新操作也会依据集合的特性从而去重
#{1, 2, 3, 4, 5}

删除元素的操作

pop

s1={1,2,3}
print(s1.pop())#删除,因为集合是无序的,所以删除也是随机删除的,返回被删除的值
print(s1)

#1
#{2, 3}

remove 根据值来删除

s1={1,2,3}
print(s1.remove(2))#没有返回值
print(s1)
#None
#{1, 3}

但是remove删除若是若是删除的值是不存在集合中的话,会报错。这是就是使用discard

s1={1,2,3}
s1.discard(4)#返回None
#s1.remove(4)#会报错
print(s1)
#{1, 2, 3}

添加值的方法 add

s1= {1,2,3}
s1.add(1)
print(s1)
#{1, 2, 3, 4}

isdisjoint 方法

s1={1,2,3}
s2={4,5}
print(s1.isdisjoint(s2))#判断没有交集
#True

======================总结===============================

存在多个值

无序

set可变

 

 

 

 

 

 

 



集合set 的知识点

标签:重复   特性   diff   type   sub   linux   添加   lin   lsb   

原文地址:https://www.cnblogs.com/msj513/p/9670923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!