集合(set)

引子:

  在之前我们要拿到交集只能是用循环判断。

  l = ['张三','李四','老男孩']

  p = ['张三','李四','alex']

  现在要找出既在linux班上课也在python班上课的学生,应该怎么找?

  

l = ['张三','李四','old_drivers']
p = ['张三','李四','goodboy']
l_p = []
for i in l:
    if i in p:
        l_p.append(i)
print(l_p)

集合是一个数学概念:有一个或多个确定的元素所构成的整体叫做集合,无序的。

特征:

  1、确定性(元素必须可hash)

  2、互异性(去重,把一个列表变成集合,就自动去重了)

  3、无序性(集合中的元素没有先后之分,如集合{}3,4,5}和{3,5,4}算作一个集合)

  注意点:集合存在的意义就在于去重和关系运算

语法:

  定义集合:s = {}

  列表转成集合:set() 元组也可以转

#列表转集合
l = {1,2,3,4,5,6,2,7,8,4,3}
set(l)
print(l)
##增删改查
l = {1,2,3,4,5,6}
l.add(7) #增加
print(l)
print(l.pop()) #删除并返回,随机删
l.remove(5) #删除指定的值
l.discard(5) #删除指定的值,不存在不会报错
l.update([5,6,7,8,9,2]) #扩展,增加多个值
l.clear() #清空所有的值
l.copy() #浅拷贝 print(l)

包含关系:

  in, not in :判断某元素是否在集合内

  ==,!= :判断两个集合是否相等

  

##关系测试
l = {'张三','李四','old_drivers'}
p = {'张三','李四','goodboy'}
print(l.intersection(p))   #交集,intersection
print(l&p)   #交集,&--->and符号
print(l.difference(p)) #差集,只在l中不在p中
print(l - p) #差集,只在l中不在p中
print(p.difference(l)) #差集,只在p中不在l中
print(p - l) #差集,只在p中不在l中
print(l.union(p))   #并集,两个集合相加
print(p | l)  #并集,两个集合相加
print(l.symmetric_difference(p)) #对称差集
print(l ^ p) #对称差集
l = {'张三','李四','old_drivers','goodboy'}
p = {'张三','李四','goodboy'}
print(p.issubset(l))   #判断p 是不是 l的子集 p <= l
print(p.issuperset(l))   #判断p 是不是 l的父集 等同于 p>= l
print(p.isdisjoint(l)) #判断两个集合是不是不相交
print(p.difference_update(l))  #把差集赋值给p
print(p.intersection_update(l))  #把交集赋值给p

练习:

  

 一.关系运算
  有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  linuxs={'wupeiqi','oldboy','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合
#  1. 求出即报名python又报名linux课程的学员名字集合
print(pythons.intersection(linuxs))
print(pythons & linuxs)
View Code
#  2. 求出所有报名的学生名字集合
print(linuxs.union(pythons))
print(pythons | linuxs)
View Code
#  3. 求出只报名python课程的学员名字
print(pythons.difference(linuxs))
print(pythons - linuxs)
View Code
#  4. 求出没有同时这两门课程的学员名字集合
print(pythons.symmetric_difference(linuxs))
print(pythons ^ linuxs)
View Code

 

转载于:https://www.cnblogs.com/chris3201/p/8926910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值