zoukankan      html  css  js  c++  java
  • 集合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

  • 相关阅读:
    白话https
    网络分层体系结构
    软件度量
    【Java】itext根据模板生成pdf(包括图片和表格)
    【java】Freemarker 动态生成word(带图片表格)
    压力测试-接口关联
    压力测试-录制脚本
    jmeter性能测试2:基础功能介绍
    jmeter性能测试1:目录解析
    桃花运
  • 原文地址:https://www.cnblogs.com/agsol/p/11528364.html
Copyright © 2011-2022 走看看