• Python学习系列之集合(十六)


    一、什么是集合

    1. 集合

    • Python语言提供了内置数据结构
    • 与列表、字典一样都属于可变类型的序列(可进行增删改操作)
    • 集合是没有value的字典(底层数据是通过Hash表进行存储)

     2. 集合是一个无序序列

    s3=set([3,4,53,56])     #集合是一个无序序列
    print(s3,type(s3))
    

      执行结果如下:

     以上结果表明,在集合中各元素的位置不一定是声明时的位置,即集合是一个无序序列

    二、集合的创建

    集合的创建方式:

      1.直接使用{}

    '''第一种创建方式使用{}'''
    s={1,2,2,3,4,5,5,6,6,7}
    print(s,type(s))
    

      执行结果如下:

     结果表明,使用{}可以创建集合,而且创建时会将重复的元素去除(集合中不允许有重复的元素),而字典是不允许有重复的key

      2.使用内置函数set()

        2.1 使用set创建一个自定义长度的集合

    '''第二种创建方式 使用内置函数set()'''
    s1=set(range(6))    #创建一个0-5的集合
    print(s1,type(s1))
    

      执行结果如下:

        2.2 set()可以将序列变成集合

    '''set()可以将序列变成集合'''
    s2=set([1,1,2,3,3,4,5])
    print(s2,type(s2))
    

      执行结果如下:

     以上结果可以看出,set()可以将列表转变成一个集合,而且会将列表中的元素做去重操作

        2.3 set()可以将元组的元素转换成集合

    '''set()可以将元组的元素转换成集合'''
    s4=set((22,33,44,45,55,56,55))
    print(s4,type(s4))
    

      执行结果如下:

         2.4 set()可以将字符串序列转换成集合

    '''set()可以将字符串序列转换成集合'''
    s5=set('Python')
    print(s5,type(s5))
    

      执行结果如下:

         2.5 set()可以将集合转换成集合

    '''set()可以将集合转换成集合'''
    s6=set({1,2,2,3,4})
    print(s6,type(s6))
    

      执行结果如下:

         2.6 set()创建空集合

    '''set()创建空集合'''
    s7=set()
    print(s7,type(s7))
    

      执行结果如下:

    三、集合的相关操作

    1. 集合元素的判断操作

    • in或not in

    举例:

    '''集合元素的判断'''
    s={10,20,30,40,50}
    print(20 in s)      #True
    print(22 in s)      #False
    print(20 not in s)      #False
    print(22 not in s)      #True
    

      执行结果如下:

    2. 集合元素的新增操作

    • 调用add()方法,一次添加一个元素
    • 调用update()方法,一次至少添加一个元素,即可以一次添加多个元素

    举例:

    '''集合的新增操作'''
    s={10,20,30,40,50}
    s.add(100)
    print(s)
    s.update({200,300,400})     #集合可以添加集合元素
    print(s)
    s.update([11,22,33])    #集合可以添加列表元素
    print(s)
    s.update((60,70,80))    #集合可以添加元组元素
    print(s)
    
    s.update(800)       #update()不能直接添加一个元素,否则会报错,添加一个元素要使用add()
    print(s)
    

        执行结果如下:

     以上结果表明,添加一个元素时需使用add()方法,update()方法只能添加列表、集合和元组元素

    3. 集合元素的删除操作

    • 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出KeyError
    • 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不会抛异常
    • 调用pop()方法,一次只删除一个任意元素
    • 调用clear()方法,清空集合

    举例:

    • 调用remove()方法删除
    print('---元素的删除---')
    s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
    s.remove(20)
    print(s)
    
    s.remove(500)       #remove()删除不存在的集合元素时会报KeyError
    print(s)
    

        执行结果如下:

    •  调用discard()方法删除
    s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
    s.discard(500)        #discard()删除不存在的集合元素时不会报KeyError
    print(s)
    

        执行结果如下:

    •  调用pop()方法删除
    s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
    s.pop()     #删除集合中任意一个元素
    print(s)
    s.pop(30)   #pop()方法不需要参数,输入参数会报TypeError: pop() takes no arguments (1 given)
    print(s)
    

      执行结果如下:

      以上结果表明,当使用pop()方法进行删除时不需要输入参数,如果输入参数则会报TypeError: pop() takes no arguments (1 given) 

    • 调用clear()方法删除
    s={800, 33, 100, 70, 40, 200, 10, 11, 300, 400, 80, 50, 20, 22, 60, 30}
    s.clear()       #清空集合
    print(s,type(s))
    

        执行结果:

    四、集合间的关系

    1. 两个集合是否相等

    • 可以使用运算符 == 或 != 进行判断

    2. 一个集合是否是另一个集合的子集

    • 可以调用方法issubset进行判断
    • B是A的子集(如下图所示)

    3.一个集合是否是另一个集合的超集

    • 可以调用方法issuperst进行判断
    • A是B的超集(如下图所示)

    4. 两个集合是否没有交集

      可以调用方法isdisjoint进行判断

    举例:

    • 判断两个集合是否相等
    '''判断两个集合是否相等'''
    s={10,20,30,40,50,60}
    s1={60,50,40,30,20,10}
    print(s==s1)
    print(s!=s1)
    

      执行结果:

     结果表明,集合是无序序列,只要两个集合中的元素值一样则两个集合就相等,不考虑顺序问题

    • 一个集合是不是另一个集合的子集
    '''一个集合是不是另一个集合的子集'''
    s={10,20,30,40,50,60}
    s2={10,20,30}
    s3={10,20,80}
    print(s2.issubset(s))
    print(s3.issubset(s))
    

      执行结果:

    •  一个集合是不是另一个集合的超集
    '''一个集合是不是一个集合的超集'''
    s={10,20,30,40,50,60}
    s2={10,20,30}
    s3={10,20,80}
    print(s.issuperset(s2))
    print(s.issuperset(s3))
    

      执行结果:

    • 两个集合是否有交集
    '''两个集合是否有交集'''
    s={10,20,30,40,50,60}
    s2={10,20,30}
    s3={70,90,80}
    print(s2.isdisjoint(s))     #False  有交集则为False
    print(s3.isdisjoint(s))     #True   没有交集则为True
    

      执行结果:

     说明:当判断是否有交集,两个集合有交集时则为False,无交集则为True

    五、集合的数学操作

     举例:

    • 集合的数学交集,intersection()与 & 等价,交集操作
    '''集合的数学操作'''
    '''第一种是交集'''
    s={10,20,30,40,50,60}
    s1={20,30,40}
    print(s.intersection(s1))
    print(s & s1)       #intersection()与 & 等价,交集操作
    

      执行结果:

    •  集合的数学并集,union()与 | 等价,并集操作
    '''集合的数学并集'''
    s={10,20,30,40,50,60}
    s2={20,30,80}
    print(s.union(s2))
    print(s | s2)       #union()与 | 等价,并集操作
    

      执行结果:

    •  集合中的数学差集
    '''集合的数学差集'''
    s={10,20,30,40,50,60}
    s2={20,30,80}
    print(s.difference(s2))
    print(s-s2)
    

      执行结果:

    •  集合中的数据对称差集
    '''集合的数学对称差集'''
    s={10,20,30,40,50,60}
    s2={20,30,80}
    print(s.symmetric_difference(s2))
    print(s^ s2)
    

      执行结果:

     注意:在数学操作中,集合原来的值是不变的,比如s集合的值在进行各种交集并集操作后,s集合的值还是原来的值

    六、集合生成式

    '''集合生成式'''
    #列表生成式
    lst=[i*i for i in range(10)]
    print(lst)
    
    #集合生成式
    s={i*i for i in range(10)}
    print(s)
    

      执行结果:

     说明:集合的生成式和列表生成式的 表达式内容是一样的,只需要将[]改成{}即可

    总结:

    列表、字典、元组、集合总结:

  • 相关阅读:
    spring boot 启动后执行初始化方法
    Linux CentOS 7 下 JDK 安装与配置
    Linux rpm 命令参数使用详解[介绍和应用]
    异常处理: 重载Throwable.fillInStackTrace方法已提高Java性能
    dubbo 配置属性
    centos7 操作防火墙
    springBoot 打包 dubbo jar包
    直播中聊天场景的用例分享
    解决在安装Fiddler4.6版本后,在手机上安装证书出现的问题解决方法
    系统调优方案思路分享
  • 原文地址:https://www.cnblogs.com/wx170119/p/14436268.html
Copyright © 2020-2023  润新知