• Python set(集合) 这一定是最全的介绍集合的博文



    Python的set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于dict的键。
    既然set是集合,则必然可以实现并、交、差、对称差等集合运算。

    set是一组无序排列的可哈希的值,因此可以用作字典中的键。set和之前介绍的list、tuple、dict等一样,可以使用in操作符检查元素是否在集合中存在,使用len()求得集合元素的个数,使用for循环迭代其成员,使用copy()返回一个浅复制。不同之处在于集合本身无序,所以没有索引,就不能实现索引和切片操作。

    set具有以下特性:

    • 元素不重复出现
    • 元素必须是不可变对象

    你可以把set当作是dict中的键来理解,当然仅仅限于数据结构层面。

    Python set基本操作

    创建

    #调用set方法创建
    
    s = set() #创建空set
    a = set('apple') #以字符串创建set
    b = set(['p', 'p', 'a', 'l', 'e']) #以list创建set
    c = set({'key1':'value1', 'key2':'value2', 'key3': 'value3'}) #以dict创建set
    
    #使用"="创建
    d = {'key1', 'key2', 'key3'}
    e = {('key1', 'key2', 'key3')} #使用tuple创建
    
    print(a,type(a))
    print(b,type(b))
    print(c,type(c))
    print(d,type(d))
    print(e,type(e))

    执行结果为:
    这里写图片描述
    ·无序无重复元素

    集合数学运算并、交、差、对称差操作符

    a = t | s          # t 和 s的并集  
    b = t & s          # t 和 s的交集
    c = t – s          # 求差集(求在t中,但不在s中的元素)  
    d = t ^ s          # 对称差集(求在t或s中,但不会同时出现在二者中的元素)  

    基本操作

    集合本身的增、删

    >>>s = set([1, 2, 3, 4])
    >>>s
    {1, 2, 3, 4}
    >>> s.add(5) #增加元素
    >>> s
    {1, 2, 3, 4, 5}
    >>> s.remove(5) #删除元素5
    >>> s.discard(4) #删除元素4
    >>> s.pop() #移除某个元素(在有序数据集pop方法移除末尾元素,无序数据集则不确定)
    >>> 1 
    {2, 3}
    >>> s.update([1, 4, 5]) #添加多个元素
    >>> s
    {1, 2, 3, 4, 5}
    >>> s.clear() #清空所有元素
    >>> s
    set() #即空集

    集合数学运算之并(union)、交(intrersection) 、差(difference)方法

    a = {11, 22, 33}
    b = {22, 33, 44}
    
    #并集
    t = a.union(b) #取并集
    print(t) #{33, 22, 11, 44}
    
    #交集
    t1 = a.intersection(b) #取交集
    t2 = a.intersection_update #取交集并用交集更新a本身
    
    
    #差集
    box1 = a.difference(b) 
    #相当于数学上的集合a - b 即取差集
    print(box1) #{11}
    print(a) #{33, 11, 22}
    
    box2 = a.difference_update(b) 
    #取差集 并用这些元素覆盖a本身
    print(box2) #None
    print(a) #{11}

    集合数学运算之对称差symmetric_difference方法

    a = {11, 22, 33}
    b = {22}
    
    temp1 = a.symmetric_difference(b)  #合并不同项(求对称差)
    print(temp1)    #{33, 11}
    print(a)       #{33, 11, 22}
    
    temp2 = a.symmetric_difference_update(b) #合并不同项,并更新a本身
    print(temp2)    #None
    print(se)       #{33, 11}

    操作符和方法的等价性

    s.update(t)  
    s |= t  
    返回增加了 set “t”中元素后的 set “s”  
    
    s.intersection_update(t)  
    s &= t  
    返回只保留含有 set “t”中元素的 set “s”  
    
    s.difference_update(t)  
    s -= t  
    返回删除了 set “t”中含有的元素后的 set “s”  
    
    s.symmetric_difference_update(t)  
    s ^= t  
    返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”  

    判断

    a = {11,22, 33}
    b = {22, 33}
    
    print(a.isdisjoint(b))        #判断是否不存在交集 False
    #请注意, 没有isjoint(判断是否存在交集这种方法)
    print(a.issubset(b))          #判断a是否是b的子集合 False
    print(a.issuperset(b))        #判断a是否是b的父集合 True

    转换

    set = set(range(4)) #range(4)方法返回从0到4,不包括4的lsit
    list = list(set)
    tuple = tuple(set)
    str = str(set)
    
    print(type(list), list)
    print(type(tuple), tuple)
    print(type(str), str)

    这里写图片描述

  • 相关阅读:
    Web自动化测试之滑动验证码的解决方案
    设计模式之单例
    设计模式之原型
    设计模式之建造者
    DG环境RMAN删除归档报错RMAN-08137: archived log not deleted【转载】
    RFS[3]: No standby redo logfiles available for thread 1
    spring-boot之webflux简单入门
    spring-boot-security组件总结补充
    spring-boot启用security组件 · 下
    spring-boot启用security组件 · 中
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842626.html
Copyright © 2020-2023  润新知