zoukankan      html  css  js  c++  java
  • Python-集合(set)

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

    注意:
      去重,把一个列表变成集合,就自动去重了
      关系测试,测试两组数据之间的交集、差集、并集等关系

    集合(set)是一个无序的不重复元素序列
    可以使用大括号{}或者set{}函数创建集合,注意:创建一个空集合必须用set()而不是{},
    因为{}是用来创建一个空字典

    创建格式:

    set1=set({1,2,"barry"})
    set2={1,2,"barry"}
    print(set1)     # {'barry', 1, 2}
    print(set2)     # {'barry', 1, 2}

    方法:

    set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
    set2 = {'ritian', 'egon', 'alex', "Lisa"}
    
    set1.add('Lisa')                    # 给集合添加元素,如果元素在集合中,则不进行任何操作
    set1.clear()            # 移除集合中所有的元素
    set2 = set1.copy()            # 拷贝一个集合
    
    set2.difference(set1)           # 返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中
    set1.difference_update(set2)           # 用于移除两个集合中都存在的元素
    set1.discard("alex")            # 用于移除指定的集合元素
    
    re = set1.intersection(set2)           # 返回两个或更多集合中都包含的元素,即交集
    set1.intersection_update(set2)          # 获取两个或更多集合中都重叠的元素,即计算交集
    
    re = set1.isdisjoint(set2)                  # 判断两个集合内是否包含相同元素,没有返回True,有的返回False
    re = set1.issubset(set2)                # 判断'set1'的所有元素是否都包含在集合'set2'内
    re = set1.issuperset(set2)              # 判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False
    
    set1.pop()                      # 随机删除集合里的某一个元素
    set1.remove('alex')                  # 删除集合内指定的元素
    
    re = set1.symmetric_difference(set2)        # 返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素
    set1.symmetric_difference(set2)    # 在原始集合 set1 中移除与 set2 集合中的重复元素,并将不重复的元素插入到集合 set1 中
    
    re = set1.union(set2)               # 合并两个集合,重复元素只会出现一次
    set1.update(set2)                  # 合并两个集合,重复元素只会出现一次

    增:

    # (1). 直接添加
    set1 = {'alex','wusir','ritian','egon'}
    set1.add('barry')
    print(set1)     # {'egon', 'ritian', 'alex', 'barry', 'wusir'}
    
    # (2). uppdate : 迭代着增加
    set1 = {'alex','wusir','ritian','egon'}
    set1.update('A')
    set1.update('老师')
    set1.update([1,2,3])
    print(set1)     # {1, 2, 3, 'egon', 'wusir', 'A', '老', 'ritian', 'alex', '师'}

    删:

    # (1). 使用 remove() 方法删除一个元素
    set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
    set1.remove('wusir')    # 删除一个元素
    print(set1)     # {'barry', 'ritian', 'alex', 'egon'}
    
    # (2). 使用 pop() 方法随机删除一个元素
    set2 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
    set2.pop()
    print(set2)
    
    # (3). 使用 clear() 方法清空集合
    set3 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
    se3.clear()
    print(set3)     # TypeError: descriptor 'clear' of 'set' object needs an argument(无值)
    
    # (4). 使用 del 函数删除集合
    set4 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
    del set4
    print(set4)     # NameError: name 'set4' is not defined(没有该集合)

    集合的交集:

    (1). 交集 : 返回两个集合都存在的值(&  或者 intersection)

    se1 = {1,2,3,4,5,6,7,8,9}
    se2 = {1,2,3,4}
    print(se1 & se2)
    print(se1.intersection(se2))    # {1, 2, 3, 4}

    (2). 并集 : 合并两个集合,重复元素只会出现一次(| 或者 union)

    se1 = {1,2,3,4,5,6,7,8,9}
    se2 = {1,2,3,4}
    print(se1 | se2)
    print(se1.union(se2))   # {1, 2, 3, 4, 5, 6, 7, 8, 9}

    (3). 差集 : 返回一个集合,元素包含在集合 se1 ,但不在集合 se2(- 或者 difference)

    se1 = {1,2,3,4,5,6,7,8,9}
    se2 = {1,2,3,4}
    print(se1 - se2)
    print(se1.difference(se2))      # {5, 6, 7, 8, 9}

    (4). 反交集 : 返回两个集合组成的新集合,但会移除两个集合的重复元素(^ 或者 symmetric_difference)

    se1 = {1,2,3,4,5,6,7,8,9}
    se2 = {1,2,3,4}
    print(se1 ^ se2)
    print(se1.symmetric_difference(se2))    # {5, 6, 7, 8, 9}

    (5). 子集或者超集 : 判断集合 se2 的所有元素是否都包含在集合 se1 中(> < 或者 issuperset)

    se1 = {1,2,3,4,5,6,7,8,9}
    se2 = {1,2,3,4}
    print(se1 < se2)                # False
    print(se1.issuperset(se2))      # True

    (6). frozenset不可变集合,让集合变成不可变类型。

    se1 = {1,2,3,4,5,6,7,88,99}
    se2 = frozenset(se1)
    print(se2)              # frozenset({1, 2, 3, 4, 5, 6, 7, 99, 88})
    print(type(se2))        # <class 'frozenset'>
  • 相关阅读:
    AutoCAD 2012安装错误,与.net framework (1603错误)以及ms2005vc++的问题。
    [转载]Thrift的C#入门Demo_图文详解版
    ASPX的Timer位置没放正确,导致整页刷新,而不是UpdatePanel里的内容刷新。
    div、ul、li等无法居中问题,text-align无效 margin auto无效
    flash导入图片缩放后出现毛边、失真、锯齿、文字模糊不清晰的情况
    table居中方法之一:设置width,然后为style设置margin:auto
    ZR普转提day1
    从“四人过桥”到“N人过桥”
    Luogu P2375 [NOI2014]动物园
    Luogu P3435 [POI2006]OKR-Periods of Words
  • 原文地址:https://www.cnblogs.com/mamouren/p/13307805.html
Copyright © 2011-2022 走看看