• DAY 013--set(增、删、改、查、关系)


    set                                                                         

    1、集合是一个无序的,不重复的数据组合,它的主要作用如下:

    • 去重,把一个列表变成一个集合,就自动去重了
    • 关系测试,测试两组数据之间的交集、差集和并集等关系

    2、集合中的元素有三个特征:

    • 1. 确定性(元素必须可hash)
    • 2. 互异性(去重)
    • 3. 无序性(集合中的元素没有先后之分),如集合{3,4,5}和集合{5,3,4}算作同一个集合

    3、如何将列表转成集合?

    • set(array)
    se=[1,2,3,3,4,5]
    print(set(se))
    print(type(set(se)))
    
    {1, 2, 3, 4, 5}
    <class 'set'>

    一、增                                                                    

    1、set.add()                                                                             

    • 如果添加的值包含在元素中,则默认不添加
    • 添加的值不一定为集合的最后一位,集合是无序的,顺序无意义
    s={1,2,3}
    s.add(3)
    print(s)
    {1, 2, 3}
    
    s.add(4)
    print(s)
    {1, 2, 3, 4}

    s.add("hello")
    print(s)
    {1, 2, 3, "hello"}

    2、set.update(iterable/string/set)                                             

    • 把要传入的元素拆分,做为个体传入到集合中

    注意:set.add是把传入的元素整体放入set中

    se = {11, 22, 33}
    be = {22,44,55}
    
    se.update(be)  # set类型
    print(se)
    se.update([66, 77])  # iterable类型
    print(se)
    se.update("hello")#string类型
    print(se)
    
    {33, 22, 55, 11, 44}
    {33, 66, 22, 55, 11, 44, 77}
    {66, 11, 'o', 77, 22, 33, 'e', 44, 'h', 'l', 55}

      

    二、删除                                                                 

    2.1、set.pop()                                                                          

    • 随机删除一个值,pop方法不能传入任何参数
    se = {11, 22, 33}
    be = {22,44,55}
    se.pop("11")
    print(se)
    #输出结果
    TypeError: pop() takes no arguments (1 given)
    
    se = {11, 22, 33}
    se.pop()
    print(se)
    #输出结果
    {11, 22}

    2.2、set.remove()                                                                    

    • 删除指定的内容,如果不存在会报错,KeyError
    se = {11, 22, 33}
    se.remove(22)
    print(se)
    #输出结果
    {33, 11}
    
    se.remove(40)
    print(se)
    #输出结果
    KeyError: 40

    2.3、set.discard()                                                                    

    • 删除指定的内容,如果不存在不会报错
    se = {11, 22, 33}
    se.discard(22)
    print(se)
    #输出结果
    {33, 11}
    
    se.discard(50)
    print(se)
    #输出结果
    {33, 11}#未报错

    2.4、set.clear()                                                                         

    • 清空,set这个集合还存在,只是内容为空而已
    se = {11, 22, 33}
    se.clear()
    print(se)
    
    set()

    2.5、del set                                                                             

    • 删除集合
    se={1,2,3,4,5}
    del se
    print(se)
    
    NameError: name 'se' is not defined

    三、集合运算                                                           

    3.1、交集                                                                                 

    集合的交集:set1和set2共有的元素

    • set1.intersection(set2)
    • set&set2
    s1={1,2,3,4,5}
    s2={2,6,7,3,0}
    print(s1&s2)#方法一
    print(s1.intersection(s2))#方法二
    
    {2, 3}
    {2, 3}

    3.2、差集                                                                                 

    集合的差集:set1中有但是set2中没有的元素

    • set1.difference(set2)
    • set1-set2
    s1={1,2,3,4,5}
    s2={2,6,7,3,0}
    print(s1-s2)
    print(s1.difference(s2))
    
    {1, 4, 5}
    {1, 4, 5}

    3.3、并集                                                                                

    集合的并集:set1和set2公有的元素

    • set1.union(set2)
    • set1 | set2
    s1={1,2,3,4,5}
    s2={2,6,7,3,0}
    
    print(s1|s2)
    print(s1.union(s2))
    
    
    {0, 1, 2, 3, 4, 5, 6, 7}
    {0, 1, 2, 3, 4, 5, 6, 7}

    3.4、对称差集                                                                          

    对称差集:set1和set2的并集减去set1和set2的交集

    • set1.symmetric_difference(set2)
    • set1^set2
    s1={1,2,3,4,5}
    s2={2,6,7,3,0}
    
    print(s1^s2)
    print(s1.symmetric_difference(s2))
    
    {0, 1, 4, 5, 6, 7}
    {0, 1, 4, 5, 6, 7}

    3.5、补充说明                                                                          

    • set1.difference_update(set2)               v.s      set1.difference(set2)
    • set1.symmetic_different_update(set2)   v.s      set1.symmetic_different(set2)

    说明:difference和symmetric_different会生成新一个结果,而different_update 和 symmetic_different_update会覆盖之前集合

    s1={1,2,3,4,5}
    s2={2,6,7,3,0}
    
    s1.difference(s2)
    print(s1)
    #输出结果
    {1, 2, 3, 4, 5}
    
    s1.difference_update(s2)
    print(s1)
    #输出结果
    {1, 4, 5}

    四、集合关系判断                                                    

    4.1、判断是否是子集                                                                  

    • set1.issubset(set2):set1是否为set2的子集,返回值为True或False
    s1={1,2}
    s2={1,2,3,4,5,6}
    print(s1.issubset(s2))
    #输出结果
    True

    4.2、判断是否是超集                                                                 

    • set1.issuperset(set2)set1是否为set2的超集,返回值为True或False
    s1={1,2}
    s2={1,2,3,4,5,6}
    print(s2.issuperset(s1))
    
    True

    4.3、判断是否相交                                                                    

    • set1.isdisjoint(set2):set1和set2如果有交集为False,没有交集为True
    s1={1,2}
    s2={1,2,3,4,5,6}
    
    print(s1.isdisjoint(s2))
    
    False

    Mark on 2018.04.13 

  • 相关阅读:
    Java Gradle
    C/C++ C++11新特性
    C/C++ C++11原子类型和内存序
    基于流的编程(Flow-Based Programming)
    算法和数据结构 筛法求素数
    数据库 悲观锁和乐观锁
    数据库 事务隔离级别
    Serverless 的 AI 写诗,程序员浪漫起来谁能顶得住啊!
    亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
    腾讯云云函数 SCF Node.js Runtime 最佳实践
  • 原文地址:https://www.cnblogs.com/JunSheep/p/8819426.html
Copyright © 2020-2023  润新知