• 集合set


    集set

    可变,无序,不重复的元素的集合

    set集合

    collection 集合类型

    s = {} #dict

    list 不可以放入其中 # 元素要求必须可hash

    定义方法:

    1. s1 = set(iterable) 可迭代单一值 或空集合

    2. s2 = {} {}中不可放入不可hash对象

      basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
      >>> print(basket)                      # 这里演示的是去重功能
      {'orange', 'banana', 'pear', 'apple'}
      >>> 'orange' in basket                 # 快速判断元素是否在集合内
      True
      >>> 'crabgrass' in basket
      False
      
    运算方法
    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a                                  
    {'a', 'r', 'b', 'c', 'd'}
    >>> a - b                              # 集合a中包含而集合b中不包含的元素
    {'r', 'd', 'b'}
    >>> a | b                              # 集合a或b中包含的所有元素
    {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
    >>> a & b                              # 集合a和b中都包含了的元素
    {'a', 'c'}
    >>> a ^ b                              # 不同时包含于a和b的元素
    {'r', 'd', 'b', 'm', 'z', 'l'}
    

    集合推导式

    >>>a = {x for x in 'abracadabra' if x not in 'abc'}
    >>> a
    {'r', 'd'}
    
    去重

    整型在set中无论在元组或直接在set中,重复会被去掉

    同类型同hash值会被去重

    方法

    增加

    set.update(*others) others 可为多个值或另一个集合,但必须为可迭代对象

    set.add(elem) add只接收一个参数

    移除

    set.remove(elem) 移除一个元素,若元素不存在,抛keyerror异常 使用hash算法找到值,效率极高

    set.discard(elem) 从set中移除elem,若元素不存在,什么都不做

    set.pop() 随机弹出一个值,空集返回keyerror异常

    set和线性结构

    线性结构的查询时间复杂度为O(n),随数据规模增大而耗时增加

    set,dict等非线性结构,内部使用hash值作为key,时间复杂度可以做到O(1),查询时间和数据规模无关

    可hash

    数值型 int,float,complex

    布尔型 True False

    字符串 string,bytse

    tuple

    None

    以上都是不可变类型,成为可哈希类型,hashable

    集合的运算

    并集 A|B

    set.union(*others) 返回两个集合的并集,生成一个新的集合

    支持 |=

    交集 A&B

    set.intersection(*others) 返回和多个集合的交集 ,生成一个新的集合

    支持 &=

    差集 A-B = A - A&B

    set.difference(*others) 返回和多个集合的差集,生成集合

    -等同于difference

    difference_update(*others) 获取和多个集合的差集并就地修改

    支持 -=

    对称差集 A^B = (A - B) | (B -A)

    set.symmetric_difference(other) 返回一个集合与另一个集合的差集,生成新集合

    set.symmetric_difference_update(other) 获取和另一个集合的差集并就地修改

    支持^=

    子集,真子集,交集

    <= 判断子集

    < 判断真子集

    set.isdisjoint(other) 判断有无交集,没有交集,返回True

  • 相关阅读:
    Java中的char究竟能存中文吗?
    AOP通过反射获取自定义注解
    烂翻译系列之面向.NET开发人员的Dapr——Actors构建块
    烂翻译系列之面向.NET开发人员的Dapr——目录
    烂翻译系列之面向.NET开发人员的Dapr——前言
    烂翻译系列之面向.NET开发人员的Dapr——分布式世界
    烂翻译系列之面向.NET开发人员的Dapr——俯瞰Dapr
    烂翻译系列之面向.NET开发人员的Dapr——入门
    烂翻译系列之面向.NET开发人员的Dapr——总结和前景
    烂翻译系列之面向.NET开发人员的Dapr——机密
  • 原文地址:https://www.cnblogs.com/agsol/p/11528364.html
Copyright © 2020-2023  润新知