zoukankan      html  css  js  c++  java
  • 集合及相关操作

    一、什么是集合

    1. 是python语言提供的一种内置的数据结构
    2. 与列表,字典一样是可变类型的序列
    3. 集合是没有value的字典

    二、集合的创建方式

    1、直接{ }

    2、使用内置函数set()

    '''
    第一种创建方式——直接使用{}
    '''
    demo={'秦健峰','梅达',98}
    print(demo)
    print(type(demo))
    
    #创建空集合
    demo_void={}
    print(demo_void,type(demo_void))  #{} <class 'dict'>可以看出,这是字典类型,也就是说建立集合时不能直接使用{}
    demo_empty=set()
    print(demo_empty,type(demo_empty))#set() <class 'set'>
    
    '''
    第二种创建反式——使用set()函数
    '''
    #使用range创建集合
    demo2=set(range(0,6))
    print(demo2)
    
    #使用列表创建集合
    lst=list([3,4,5,2,3,3,3])
    print(lst,type(lst))
    demo3=set(lst)
    print(demo3,type(demo3))   #{2, 3, 4, 5} <class 'set'>可以看到集合中重复的元素被删除,集合中的元素不允许重复
    
    #使用元组创建集合
    test=(123,'meida',98)
    print(test,type(test))  #(123, 'meida', 98) <class 'tuple'>
    demo4=set(test)
    print(demo4,type(demo4))#{'meida', 123, 98} <class 'set'>可以看出集合是无序的
    
    #使用字符串创建集合
    sty='python'
    print(sty,type(sty))#python <class 'str'>
    demo5=set(sty)
    print(demo5,type(demo5))#{'n', 't', 'p', 'y', 'o', 'h'} <class 'set'>
    
    #使用集合创建集合
    demo6=set({124,64,25})
    print(demo6,type(demo6))#{64, 25, 124} <class 'set'>

    三、集合的相关操作

    1、集合元素的判断操作

    • in
    • not in
    '''
    集合的判断操作
    '''
    print(90 in demo)     #False
    print(90 not in demo) #True
    print(98 in demo)     #True
    print(98 not in demo) #False

    2、集合元素的新增操作

    • 调用add()方法,一次添加一个元素
    • 调用update()方法至少添加一个元素
    '''
    集合的新增操作
    '''
    demo.add(500)
    print(demo,type(demo))  #{98, 499, 23, 500, 6, 455, 89} <class 'set'>
    
    #将集合添加到另一个集合中
    demo.update({100,200,300})
    print(demo)#{98, 100, 6, 455, 200, 300, 499, 500, 23, 89}
    #J将列表元素添加到另一个集合中
    demo.update([900,88,6666,544])
    print(demo)#{544, 98, 100, 900, 6, 455, 200, 6666, 300, 499, 500, 23, 88, 89}
    #将元组添加到集合中
    demo.update((1,2,3,4,5,6))
    print(demo)#{1, 2, 3, 900, 4, 6, 5, 6666, 23, 544, 300, 455, 200, 88, 89, 98, 100, 499, 500}
    
    demo.update(5) #TypeError: 'int' object is not iterable///update()不能代入一个元素

    3、集合元素的删除操作

    • 调用remove()方法,一次删除一个指定元素,如果指定的元素不存在就抛出异常KeyError
    • 调用discard()方法,一次删除一个指定元素,如果指定的元素不存在也不抛出异常
    • 调用pop()方法,一次只删除一个任意元素,不可指定元素删除
    • 调用clear()方法,清空集合
    '''
    集合的删除操作
    '''
    print("集合元素的删除操作")
    print(demo)
    
    #remove方法
    demo.remove(1)
    print(demo)
    #demo.remove(999999)#KeyError: 999999如果指定元素不存就会报错
    
    #discard方法
    demo.discard(2)
    print(demo)
    demo.discard(514151)#虽然指定元素不存在,但是也不会抛出异常
    
    #pop方法
    demo.pop()
    print(demo)#随机删除
    #demo.pop(6)#TypeError: set.pop() takes no arguments (1 given)//pop不能指定参数
    
    #clear方法
    demo.clear()
    print(demo)#set()//空集合

    四、集合间的关系

    1、两个集合是否相等

    s1={10,20,30,40,50}
    s2={50,40,30,20,10}
    s3={1,2,3,4,5}
    
    print(s1==s2) #True
    print(s1!=s2) #False
    print(s1==s3) #False
    print(s1!=s3) #True

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

    s1={10,20,30,40,50}
    s2={10,20,30,40}
    s3={10,20,60}
    
    print(s2.issubset(s1))#True
    print(s3.issubset(s1))#False

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

    s1={10,20,30,40,50}
    s2={10,20,30,40}
    s3={10,20,60}
    
    print(s1.issuperset(s2))#True
    print(s1.issuperset(s3))#False

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

    s1={10,20,30,}
    s2={1,2,3}
    s3={10,20,60}
    
    print(s1.isdisjoint(s2))#True
    print(s1.isdisjoint(s3))#False

    五、集合的数学操作

    • 交集
    • 并集
    • 差集
    • 对称差集
    '''
    交集操作
    '''
    s1={10,20,30,40}
    s2={20,30,40,50,60}
    
    print(s1.intersection(s2))
    print(s1 & s2) # & 与 intersection()方法等价——求交集操作
    
    '''
    并集操作
    '''
    print(s1)
    print(s2)
    print(s1.union(s2))
    print(s1 | s2) # | 与union()方法等价
    
    '''
    差集操作
    '''
    print(s1.difference(s2))
    print(s1 - s2) # - 与difference()方法等价
    
    '''
    对称差集
    '''
    print(s1.symmetric_difference(s2))
    print(s1 ^ s2)# ^ 与symmertric_difference()方法等价

    六、集合生成式

    '''
    列表生成式
    '''
    lst=[i*i for i in range(6)]
    print(lst,type(lst))
    
    '''
    集合生成式
    '''
    demo={i*i for i in range(6)}
    print(demo,type(demo))
    
    运算结果:
    
    [0, 1, 4, 9, 16, 25] <class 'list'>
    {0, 1, 4, 9, 16, 25} <class 'set'>
    

      

  • 相关阅读:
    5W1H聊开源之What——开源协议有哪些?
    5W1H聊开源之What——开源是什么?
    测试开发专题-开篇
    痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
    痞子衡嵌入式:以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程
    痞子衡嵌入式:超级下载算法RT-UFL v1.0发布,附J-Link下安装教程
    《痞子衡嵌入式半月刊》 第 34 期
    痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)
    痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记番外(1)
    痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现(轮询)
  • 原文地址:https://www.cnblogs.com/xiaoqing-ing/p/14980820.html
Copyright © 2011-2022 走看看