zoukankan      html  css  js  c++  java
  • Python数据结构之集合类型(set)

    集合类型(set)

    • 集合定义

    • 集合-增加元素

    • 集合-删除元素

    • 集合-查看元素

    • 交集

    • 并集

    • 差集

    • 反交集

    • 子集与超集

    • set内置函数

    • frozenset不可变集合,让集合变成不可变类型;

    一、集合定义

      集合(set)是一个无序的、元素不重复的序列;

      集合的元素都是不可变类型的

      使用大括号 { } 或者set()函数创建,注意:创建一个空集合必须使用set()而不是 { },因为 { } 是用来创建一个空字典;

      创建集合:

    se = {"a","b","c",(1,2,3)}
    se1 = set("123")
    se2 = set((1,2,3,4,5,))
    print(se)
    print(se1)
    print(se2)
    ---------------------输出结果----------------------------------
    {'c', 'b', 'a', (1, 2, 3)}
    {'3', '1', '2'}
    {1, 2, 3, 4, 5}

    二、集合-增加元素

      1.s.add(x)

      说明:将元素x添加到集合s中,如果元素已存在,则不进行任何操作;

      实例:

    se = set(("zjk","china","beijing"))
    se.add("hello world")
    print(se)
    
    --------------------输出结果---------------------
    {'beijing', 'china', 'zjk', 'hello world'}

      2.s.update(x)

      说明:添加元素,参数可以是列表,元组、字典等;

      实例:

    se = {"a","b","c","d","e"}
    se.update([1,2,3,4,5])
    print(se)
    
    -------------输出结果-------------------
    {'a', 1, 2, 3, 'e', 'b', 4, 5, 'c', 'd'}

    三、集合-删除元素

      1.s.remove(x)

      说明:将元素x从集合s中删除,如果该元素不存在,则报错;

      实例:

    se = {"a","b","c","d","e"}
    se.remove("d")
    print(se)
    
    ----------------输出结果---------------------
    {'e', 'b', 'a', 'c'}

    se = {"a","b","c","d","e"}
    se.remove("dddd")
    print(se)
    -----------------输出结果------------------

    Traceback (most recent call last):
    File "C:/Users/Administrator/Desktop/123.py", line 2, in <module>
    se.remove("dddd")
    KeyError: 'dddd'

      

      2.s.discard(x)

      说明:将元素x从集合中删除,如果该元素不存在,不会发生错误并返回当前集合

      实例:

    se = {"a","b","c","d","e"}
    se.discard("e")
    print(se)
    ------------------输出结果-----------------------
    {'d', 'a', 'b', 'c'}
    
    
    
    se = {"a","b","c","d","e"}
    se.discard("eeee")
    print(se)
    -----------------------输出结果-------------------
    {'b', 'c', 'd', 'a', 'e'}

      3.pop()

      说明:随机删除集合的一个元素,并返回这个被删除的元素;

      实例:

    se = {"a","b","c","d","e"}
    a = se.pop()
    print(se,a)
    
    -----------------输出结果-------------------
    {'c', 'b', 'e', 'a'} d

      4.s.clear()

      说明:清空集合s

      实例:

    se = {"a","b","c","d","e"}
    se.clear()
    print(se)
    ------------输出结果---------------
    set()

    四、集合-查看元素

      通过for循环遍历集合的元素;

      实例:

    >>> se = {"a","b","c",(1,2,3,4)}
    >>> for n in se:
    ...     print(n)
    ... 
    a
    (1, 2, 3, 4)
    c
    b

    五、交集(& 或者 intersection)

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

    六、并集(| 或者 union)

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

    七、差集(- 或者 difference)

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

    八、反交集(^ 或者 symmetric_difference)

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

    九、子集与超集

    >>> se1 = {1,2,3}
    >>> se2 = {1,2,3,4,5,6}
    
    >>> print(se1 < se2)
    True
    >>> print(se1.issubset(se2))
    True
    #这两个用法相同,都是说明se1是se2的子集
    
    
    >>> print(se2 > se1)
    True
    >>> print(se2.issuperset(se1))
    True
    #这两个都相同,都是说明se2是se1超集。

    十、set内置函数

      1.add(self, *args, **kwargs)

      说明:向集合中添加元素;

      语法:set.add(*args, **kwargs)

      实例:

    >>> se1.add(4)
    >>> se1 = {1,2,3}
    >>> se1.add(4)
    >>> print(se1)
    {1, 2, 3, 4}

      2.clear(self, *args, **kwargs)

      说明:清空集合;

      语法:set.clear()

      实例:

    >>> se1 = {1,2,3}
    >>> se1.clear()
    >>> print(se1)
    set()

      3.copy(self, *args, **kwargs)

      说明:返回集合的浅拷贝;

      语法:set.copy()

      实例:

    >>> se1 = {1,2,3,(4,5,6)}
    >>> se2 = se1.copy()
    >>> print(se2)
    {1, 2, 3, (4, 5, 6)}

      4.difference(self, *args, **kwargs)

      说明:将两个或多个集合的差集作为一个新集合返回;

      语法:se1.difference(se2)

      实例:

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

       5.difference_update(self, *args, **kwargs)

      说明:从这个集合中删除另一个集合的所有元素

      语法:set.difference_update(set1)

      实例:

    >>> s = {1,2,3}
    >>> s1 = {1,2,3,4}
    >>> s2 = {2,3}
    >>> s.difference_update(s2)
    >>> s
    {1}
    >>> s1.difference_update(s2)
    >>> s1
    {1, 4}

      6.discard(self, *args, **kwargs)

      说明:删除集合中的一个元素,如果该元素不存在,则不执行任何操作;

      语法:set.discard(x)

      实例:

    >>> s1 = {1,2,3,4}
    >>> s1.discard(3)
    >>> s1
    {1, 2, 4}
    >>> s1.discard("a")
    >>> s1
    {1, 2, 4}

      7.intersection(self, *args, **kwargs)

      说明:将两个集合的交集作为一个新集合返回

      语法:set.intersection(set1)

      实例:

    >>> s1 = {1,2,3,4}
    >>> s2 = {3,4,5,6}
    >>> s3 = s1.intersection(s2)
    >>> s3
    {3, 4}

      8.intersection_update(self, *args, **kwargs)

      说明:用自己和另一个的交集来更新这个集合;

      语法:s.intersection_upfate(s2)

      实例:

    >>> s = {"a","b","c","d","e"}
    >>> s1 = {"c","d","e","e","f","g"}
    >>> s.intersection_update(s1)
    >>> s
    {'d', 'c', 'e'}

      9.isdisjoint(self, *args, **kwargs)

      说明:如果两个集合有一个空交集,返回True

      语法:set.isdisjoint(set1)

      实例:

    >>> s = {1,2}
    >>> s1 = {3,4}
    >>> s2 = {2,3}
    >>> s.isdisjoint(s1)
    True
    >>> s.isdisjoint(s2)
    False

      10.issubset(self, *args, **kwargs)

      说明:如果另一个集合包含这个集合,返回True

      语法:s.issubset(set1)

      实例:

    >>> s = {1,2,3}
    >>> s1 = {1,2,3,4}
    >>> s2 = {2,3}
    >>> s.issubset(s1)
    True
    >>> s.issubset(s2)
    False
    >>> s2.issubset(s)
    True

      11.issuperset(self, *args, **kwargs)

      说明:如果这个集合包含另一个集合,返回True;

      语法:s.issuperset(s1)

      实例:

    >>> s = {1,2,3}
    >>> s1 = {1,2,3,4}
    >>> s2 = {2,3}
    >>> s1.issuperset(s)
    True
    >>> s.issuperset(s2)
    True
    >>> s2.issuperset(s1)
    False

      12.pop(self, *args, **kwargs)

      说明:删除并返回任意的集合元素(如果集合为空,会引发KeyError)

      语法:s.pop()

      实例:

    >>> s = {1,2,3,4,5,6}
    >>> s.pop()
    1
    >>> s
    {2, 3, 4, 5, 6}

      13.remove(self, *args, **kwargs)

      说明:删除集合中的一个元素(如果元素不存在,会引发KeyError)

      语法:set.remove(x)

      实例:

    >>> s = {1,2,3,4,5,6}
    >>> s.remove(4)
    >>> s
    {1, 2, 3, 5, 6}
    >>> s.remove(99)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 99
    >>> s
    {1, 2, 3, 5, 6}

      14.symmetric_difference(self, *args, **kwargs)

      说明:将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)

      语法:s.symmetric_difference(s1)

      实例:

    >>> s1 = {1,2,3,4,5,6,7,8}
    >>> s2 = {3,4,5,6,7,8,9,10}
    >>> s1.symmetric_difference(s2)
    {1, 2, 9, 10}
    >>> s2.symmetric_difference(s1)
    {1, 2, 9, 10}

      15.symmetric_difference_update(self, *args, **kwargs)

      说明:用自己和另一个的对称差来更新这个集合

      语法:s.symmetric_difference_update(s1)

      实例:

    >>> s = {1,2,3}
    >>> s1 = {1,2,3,4}
    >>> s2 = {2,3}
    >>> s1.symmetric_difference_update(s)
    >>> s1
    {4}
    >>> s1.symmetric_difference_update(s2)
    >>> s1
    {2, 3, 4}
    >>> s.symmetric_difference_update(s2)
    >>> s
    {1}

      15.union(self, *args, **kwargs)

      说明:将集合的并集作为一个新集合返回;

      语法:s.union(s1)

      实例:

    >>> s = {1,2,3,4,5,6}
    >>> s1 = {3,4,5,6,7,8}
    >>> print(s.union(s1))
    {1, 2, 3, 4, 5, 6, 7, 8}
    >>> print(s|s1)
    {1, 2, 3, 4, 5, 6, 7, 8}

      16.update(self, *args, **kwargs)

      说明:用自己和另一个的并集来更新这个集合;

      语法:s.update(*args, **kwargs)

      实例:

    >>> s = {"p","y"}
    >>> s.update("t","h","o","n")
    >>> s
    {'p', 'h', 't', 'n', 'y', 'o'}
    >>> s.update(["q","e"],{"l","l","o"})
    >>> s
    {'q', 'p', 'h', 't', 'n', 'y', 'o', 'e', 'l'}

    十一、frozenset不可变集合,让集合变成不可变类型

    >>> s = frozenset("zjk")
    >>> print(s,type(s))
    frozenset({'z', 'k', 'j'}) <class 'frozenset'>
  • 相关阅读:
    074孤荷凌寒从零开始学区块链第74天DAPP029
    073孤荷凌寒从零开始学区块链第73天DAPP028
    iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用
    iOS开发——UI进阶篇(十六)Quartz2D实战小例子
    iOS开发——UI进阶篇(十五)Quartz2D介绍
    iOS开发——UI进阶篇(十四)modal
    iOS开发——UI进阶篇(十三)UITabBarController简单使用,qq主流框架
    iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
    iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
    iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
  • 原文地址:https://www.cnblogs.com/zhangjunkang/p/9409963.html
Copyright © 2011-2022 走看看