zoukankan      html  css  js  c++  java
  • 集合set 的知识点

    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可变

     

     

     

     

     

     

     



  • 相关阅读:
    利用JSGrid创建甘特图
    Using the SharePoint 2010 Client Object Model_part_2
    Using the SharePoint 2010 Client Object Model_part_1
    如何利用Featue对特定的文档库或列表添加listviewtoolbar上的button
    SharePoint 2010 工作流解决方案:创建带有关联窗体和启动窗体的工作流
    Wireshark过滤器
    first blog
    DataAdapter.update如果处理自动增长列的数据
    ms sql 中关于spid=2的问题
    利用ADO.NET RowUpdating更新DataRow信息
  • 原文地址:https://www.cnblogs.com/msj513/p/9670923.html
Copyright © 2011-2022 走看看