zoukankan      html  css  js  c++  java
  • 集合中的方法

      集合中的方法:利用set()创建的集合是可变集合,它的类型是不可哈希(unhashable)的。对于这句话的理解是,set()创建的集合,整体上是可变的,可以增、删;但集合中的元素(个体)是不可变(hashable)的,不能被修改,且集合中的元素不能是列表、字典等可变类型的对象。

      add()方法:向集合中增加一个元素。如果要增加的元素已存在于集合中,则什么也不做。add()方法必须传入一个明确的不可变的参数,因为集合是无序的,所以元素会被加到集合的任意位置。

    >>> a = set([1, 2, 'q'])
    >>> a
    {1, 2, 'q'}
    >>> a.add(6)    # 增加一个整数
    >>> a
    {1, 2, 6, 'q'}
    >>> a.add('www')    # 增加一个整数
    >>> a
    {1, 2, 'www', 6, 'q'}
    >>> a.add(('s', 7))    # 增加一个整数
    >>> a
    {1, 2, 'www', 6, 'q', ('s', 7)}
    >>> a.add({1, 0, 'r'})    # 增加的元素必须是hashable的
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'set'
    >>> a.add([2, 7])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    >>> a.add({'A':99})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'dict'

      update()方法:合并集合或其他不可变的对象到另一个集合中,以更新该集合。

    >>> set1 = {1, 3, 'a'}
    >>> set2 = {'b', 'A'}
    >>> set1.update(set2)    # 合并集合
    >>> set1    # set1被修改
    {'a', 1, 3, 'A', 'b'}
    >>> set2    # set2不变
    {'A', 'b'}
    >>> set2.update('Java')    # 还可合并其他不可变类型的对象,如字符串
    >>> set2
    {'a', 'J', 'A', 'v', 'b'}
    >>> set2.update(('g', 9))    # 如元组
    >>> set2
    {'A', 9, 'v', 'a', 'g', 'J', 'b'}

      pop()方法:删除集合中的一个元素。此方法没有参数,是随机删除集合中的一个元素,并将此元素返回。当集合为空时,若继续删除,则报错。

    >>> set1 = {3, 'A'}
    >>> set1.pop()    # 不传参数,随机删除一个元素,并返回
    3
    >>> set1.pop()
    'A'
    >>> set1.pop()    # 集合为空时,报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'pop from an empty set'

      remove方法:删除集合中的一个指定的元素。此方法必须提供一个参数,该参数即为要删除的元素,不返回任何值,只是在原地修改集合。若指定的要删除的元素不存在于集合中,则报错。

    >>> set1 = {3, 'A'}
    >>> set1.remove('A')    # 删除指定元素,没有任何返回值
    >>> set1    # 原地修改集合
    {3}
    >>> set1.remove(6)    # 若要删除的元素不存在,报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 6

      discard()方法:作用与用法同remove()方法,区别在于若要删除的对象不存在于集合中,则什么也不做。

    >>> set1 = {3, 'A'}
    >>> set1.discard('A')    # 删除指定元素,没有任何返回值
    >>> set1    # 原地修改集合
    {3}
    >>> set1.discard('B')    # 若要删除的元素不存在,则什么也不做

      clear()方法:清空集合。清空集合中的所有元素,清空后的集合对象依然存在,只是变成一个空集合。

    >>> set1 = {3, 'A'}
    >>> set1.clear()    # 清空集合,不返回任何值
    >>> set1    # 清空后的集合对象依然存在,只是变成一个空集合
    set()

      del:删除集合。集合对象将完全被删除,集合对象将不存在于内存中了。

    >>> set1 = {3, 'A'}
    >>> del set1    # 完全删除集合对象
    >>> set1    # 被删除的集合对象不再存在
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'set1' is not defined

      不变的集合:以set()创建的集合都是可变几何,集合对象可以被原地修改,即集合对象时不可哈希(unhashable)的。以frozenset()创建的集合则是不可变的,集合对象不能实现增加或删除,即可哈希(hashable)的。此时,set中的增加或删除元素的方法在frozenset中都没有。

    >>> f_set = frozenset('python')
    >>> f_set
    frozenset({'t', 'h', 'y', 'n', 'p', 'o'})
    >>> f_set.add(3)    # 不能增加元素
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'frozenset' object has no attribute 'add'

    集合运算

             元素与集合的关系:元素与集合只有一种关系,元素要么属于某个集合,要么不属于。

    >>> set1 = set('python')
    >>> set1
    {'t', 'h', 'y', 'n', 'p', 'o'}
    >>> 't' in set1    # 元素属于集合
    True
    >>> 'm' not in set1    # 元素不属于集合
    True

      集合与集合的关系:假设有两个集合A和B。

                      A是否等于B,即两个集合的元素是否完全一样。

    >>> A = set('python')
    >>> B = set('python')
    >>> A == B    # 判断A和B是否相等
    True
    >>> A != B
    False

        A是否是B的子集,或B是否是A的超集。

    >>> A = set('python')
    >>> A
    {'t', 'h', 'y', 'n', 'p', 'o'}
    >>> B = set('python23')
    >>> B
    {'2', 't', 'h', 'y', '3', 'n', 'p', 'o'}
    >>> A < B    # 判断A是否是B的子集
    True
    >>> A.issubset(B)    # 判断A是否是B的子集
    True
    >>> B > A    # 判断B是否是A的超集
    True
    >>> B.issuperset(A)    # 判断B是否是A的超集
    True

        A和B的并集。这个结果是生成一个新的对象,原有的集合没有改变。

    >>> A = set('pyt')
    >>> B = set('hon2')
    >>> A | B    # A和B的并集
    {'2', 't', 'h', 'n', 'y', 'p', 'o'}
    >>> A.union(B)    # A和B的并集
    {'2', 't', 'h', 'n', 'y', 'p', 'o'}
    >>> A    # 原有的集合没有改变
    {'t', 'y', 'p'}
    >>> B
    {'2', 'h', 'n', 'o'}

        A和B的交集。这个结果是生成一个新的对象,原有的集合没有改变。

    >>> A = {1, 'e', 'f', 'd'}
    >>> B = {1, 'w', 'f'}
    >>> A & B    # A和B的交集
    {1, 'f'}
    >>> A.intersection(B)    # A和B的交集
    {1, 'f'}
    >>> A    # 原有的集合没有改变
    {1, 'e', 'd', 'f'}
    >>> B
    {1, 'w', 'f'}

        A相对于B的差(补)。即A相对于B的不同的部分元素。也是生成一个新的对象,原有的集合没有改变。

    >>> A = {1, 'e', 'f', 'd'}
    >>> B = {1, 'w', 'f'}
    >>> A – B    # A相对于B的差(补)集
    {'e', 'd'}
    >>> A.difference(B)    # A相对于B的差(补)集
    {'e', 'd'}
    >>> A    # 原有的集合没有改变
    {1, 'e', 'd', 'f'}
    >>> B
    {1, 'w', 'f'}

    AB的对称差集。A相对于B的不同的部分元素和B相对于A的不同的部分元素的并集。

    >>> A = {1, 'e', 'f', 'd'}
    >>> B = {1, 'w', 'f'}
    >>> A – B    # A相对于B的不同的部分元素
    {'e', 'd'}
    >>> B – A    # B相对于A的不同的部分元素
    {'w'}
    >>> A.symmetric_difference(B)    # A和B的对称差集
    {'e', 'w', 'd'}

      

    >= {1, 'e', 'f', 'd'}

    >>> B = {1, 'w', 'f'}

    >>> A – B    # A相对于B的差()

    {'e', 'd'}

    >>> A.difference(B)    # A相对于B的差()

    {'e', 'd'}

    >>> A    # 原有的集合没有改变

    {1, 'e', 'd', 'f'}

    >>> B

    {1, 'w', 'f'}

  • 相关阅读:
    ChartCtrl源码剖析之——CChartTitle类
    ChartCtrl源码剖析之——CChartObject类
    如何在BCGControlBar工程的工具栏里面新增下拉列表控件
    如何在BCGControlBar界面库的CBCGPFormView子视图里面添加工具栏
    记一次调试串口设备Bug的经历
    复数学习笔记
    2021 新高考Ⅰ卷数学试卷及答案
    博客搬家了
    塔伯自我指涉由图片生成K值python程序
    塔伯自我指涉公式作图程序(matplotlib)
  • 原文地址:https://www.cnblogs.com/wgbo/p/9577512.html
Copyright © 2011-2022 走看看