zoukankan      html  css  js  c++  java
  • 2.4.2 集合操作与运算

    1 集合元素增加与删除

      使用集合对象的add()方法可以为其增加新元素,如果该元素已存在于集合则忽略该操作;update()方法用于合并另外一个集合中的额元素到当前集合中。例如:

     1 >>> s = {1,2,3}
     2 >>> s.add(3)
     3 >>> s
     4 {1, 2, 3}
     5 >>> #添加元素,重复元素自动忽略
     6 >>> 
     7 >>> s.update({3,4})    #更新当前集合,自动忽略重复的元素
     8 >>> 
     9 >>> s
    10 {1, 2, 3, 4}
    11 >>> 

      

      集合对象的pop()方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;remover()方法用于删除集合中的元素,如果指定元素不存在则抛出异常;discard()用于从集合中删除一个特定元素,如果元素不在集合中则忽略该操作;clear()方法清空集合删除所有元素。例如:

     1 >>> s
     2 {1, 2, 3, 4}
     3 >>> 
     4 >>> s.discard(5)          #删除元素,集合中不存在则忽略该操作
     5 >>> 
     6 >>> s.remove(5)           #删除元素,集合中不存在则抛出异常
     7 Traceback (most recent call last):
     8   File "<pyshell#80>", line 1, in <module>
     9     s.remove(5)           #删除元素,集合中不存在则抛出异常
    10 KeyError: 5
    11 >>> 
    12 >>> s.pop()               #删除并返回一个元素
    13 1
    14 >>> 
    15 >>> s.clear()             #清空集合中所有元素
    16 >>> 
    17 >>> s
    18 set()
    19 >>> 

    2 集合运算

      Python集合支持交集、并集、补集、差集等运算,例如:

     1 >>> aset = set([8,9,10,11,12,13])
     2 >>> bset = {0,1,2,3,7,8}
     3 >>> 
     4 >>> aset | bset                                  #并集
     5 {0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
     6 >>> 
     7 >>> aset.union(bset)                             #并集
     8 {0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
     9 >>> 
    10 >>> aset & bset                                  #交集
    11 {8}
    12 >>> aset.intersection(bset)                      #交集
    13 {8}
    14 >>> 
    15 >>> aset - bset                                  #差集
    16 {9, 10, 11, 12, 13}
    17 >>> 
    18 >>> aset.difference(bset)                        #差集
    19 {9, 10, 11, 12, 13}
    20 >>> 
    21 >>> aset.symmetric_difference(bset)              #对称差集
    22 {0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
    23 >>> 
    24 >>> #对称差集的意思就是,提出两个集合的交集部分,剩下的元素组成的集合
    25 >>> 
    26 >>> aset ^ bset
    27 {0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
    28 >>> 
    29 
    30 #稍微总结一下:
    31 #并集:       |     union
    32 #交集:       &     intersection
    33 #差集:       -     difference
    34 #对称差集:    ^    symmetric_difference
     1 #比价集合的大小,确切地说是判断集合之间的包含关系
     2 
     3 >>> x = {1,2,3}
     4 >>> y = {1,2,5}
     5 >>> z = {1,2,3,4}
     6 >>> 
     7 >>> x < z
     8 True
     9 >>> 
    10 >>> x > y
    11 False
    12 >>> 
    13 >>> x < y
    14 False
    15 >>> 
    16 >>> y < z
    17 False
    18 >>>
    19 
    20 
    21 
    22 
    23 #关系运算符 >、>=、<、<=作用于集合时表示集合之间的包含关系,而不是集合中元素的大小关系。
    24 
    25 #如果 A >  B  成立的话,说明集合B的元素都在集合A中,是集合B包含于集合A
    26 
    27 >>> a = {1,2,3}
    28 >>> b = {1,2,3}
    29 >>> 
    30 >>> a > b
    31 False
    32 >>> 
    33 >>> a >= b     #两个集合元素是相通的,判断结果返回True
    34 True
    35 >>> 
    36 >>> a <= b
    37 True
    38 >>> 
    39 >>> a = {1,2,3,4}
    40 >>> b = {1,2,3}
    41 >>> 
    42 >>> a > b
    43 True
    44 >>> 
    45 >>> a < b
    46 False
    47 >>> 
     1 >>> #测试是否为子集
     2 >>> 
     3 >>> a = {1,2}
     4 >>> b = {1,2}
     5 >>> c = {1,2,3}
     6 >>> 
     7 >>> a.issubset(b)   #测试集合a是否为集合b的子集
     8 True
     9 >>> 
    10 >>> b.issubset(b)   #测试集合b是否为集合a的子集
    11 True
    12 >>> 
    13 >>> a.issubset(c)   #测试集合a是否为集合b的子集
    14 True
    15 >>> 
    16 >>> c.issubset(a)    #测试集合c是否为集合a的子集
    17 False
    18 >>> 
    19 
    20 
    21 #如果两个集合的元素相同,就互为子集

      小提示:内置函数len()、max()、min()、sum()、sourted()以及成员测试运算符in也适用于集合。

      

       拓展知识:

        自定义枚举类型,除了本章介绍的常用数据类型,Python还通过collections、enum、array、heapq、fractions等标准库提供了其他丰富的类型,这里简单介绍如何使用enum模块提供的Enum类来创建枚举类型,其他标准库将在后续章节中根据内容的组织逐步进行介绍。

     1 >>> from enum import Enum       #导入模块中的类
     2 >>> 
     3 >>> class Color(Enum):          #创建自定义枚举类
     4     red = 1
     5     blue = 2
     6     green = 3
     7 
     8     
     9 >>> 
    10 >>> Color.red               #访问枚举类的成员
    11 <Color.red: 1>
    12 >>> 
    13 >>> type(Color.green)       #查看枚举类成员的类型
    14 <enum 'Color'>
    15 >>> 
    16 >>> 
    17 >>> isinstance(Color.red,Color)
    18 True
    19 >>> 
    20 >>> x = dict()
    21 >>> x[Color.red] = 'red'    #枚举类成员可以哈希,可以作为字典的“键”
    22 >>> x
    23 {<Color.red: 1>: 'red'}
    24 >>> 
    25 >>> Color(2)                #返回指定值对应的枚举类成员
    26 <Color.blue: 2>
    27 >>> 
    28 >>> 
    29 >>> Color['red']
    30 <Color.red: 1>
    31 >>> 
    32 >>> 
    33 >>> r = Color.red
    34 >>> r
    35 <Color.red: 1>
    36 >>> 
    37 >>> r.name
    38 'red'
    39 >>> 
    40 >>> r.value
    41 1
    42 >>> 
    43 >>> list(Color)      #枚举类是可以迭代的,所以可以转换为列表
    44 [<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]
    45 >>> 
  • 相关阅读:
    Ribbon 和 Eureka 积分
    zabbix 实现curl 显示器
    《算法入门经典大赛——培训指南》第二章考试
    今天你还抽象?
    Big Data Security Part One: Introducing PacketPig
    Big Data Analytics for Security(Big Data Analytics for Security Intelligence)
    CA
    通过Shell和Redis来实现集群业务中日志的实时收集分析
    用Maven编译Apache flume-ng 1.5.0源码及问题解决
    java8-concurrency-tutorial-thread-executor-examples
  • 原文地址:https://www.cnblogs.com/avention/p/8547896.html
Copyright © 2011-2022 走看看