1.   在学习本节之前,我们先对数据类型做一个补充,也就是数据类型的分类:
  2.  
  3.      按照可变和不可变来分:
  4.  
  5.        可变:列表,字典
  6.  
  7.        不可变:数字,字符串,元组
  8.  
  9.      按照访问顺序来分:
  10.  
  11.        顺序访问:字符串,列表,元组
  12.  
  13.        映射的方式访问:字典
  14.  
  15.        直接访问:数字
  16.  
  17.      按照存放元素的个数来分:
  18.  
  19.        容器类型:列表,元组,字典
  20.  
  21.        原子类型:数字,字符串

   集合,又不同的元素组成,目的是将不同的值放到一起,不同的集合间用作关系运算,无需纠结集合中的单个值。无序,元素必须是不可变类型。创建集合的方法有两种,一种是set(),另一种是frozenset()。通过set()创建的集合是可变集合,不存在hash值,无序且不重复;通过frozenset()创建的集合是不可变的,我们也可以叫做冻结集合,存在hash值,可以作为字典的key值。在通过这两种方法进行创建的时候,如果不传入参数的话,就会创建空的集合,如果传入参数,那就必须是可迭代的,比如一个序列,一个列表等。

   集合的创建

  1.   set()来创建
      name = "jasonhy"
  2.   s = set(name)
  3.   print(s)
         输出结果是:
            {'s', 'a', 'h', 'n', 'j', 'y', 'o'}
  1.   names = ["jasonhy","Jasonhy"]
  2.   s = set(names)
  3.   print(s)
         输出结果是:
            {'Jasonhy', 'jasonhy'}

      功能一:添加元素

  1. def add(self, *args, **kwargs):
  2. """
  3. Add an element to a set.  #添加一个元素到集合中
  4.  
  5. This has no effect if the element is already present.
  6. """
  7. pass
  1. def update(self, *args, **kwargs):
  2. """ Update a set with the union of itself and others. """ #可添加多个值,只要是可迭代的都可以添加进去
  3. pass
  1.  
  1.   案例:
  1.   name = "jasonhy"
  2.   s = set(name)
  3.   s.add("")
  4.   print(s)
         输出结果是:
            {'y', 'j', 'a', 'h', '18', 's', 'n', 'o'}
  1.  #添加多个值
     name = "jasonhy"
  2.  s = set(name)
  3.  s.update("JASONHY")
  4.  print(s)
        输出结果是:
           {'n', 'N', 'O', 'Y', 'o', 'j', 'J', 'S', 'A', 's', 'h', 'H', 'a', 'y'}
  1.    功能二:删除元素
  1. def clear(self, *args, **kwargs):
  2. """ Remove all elements from this set. """ #删除所有的元素
  3. pass
  1. def pop(self, *args, **kwargs):
  2. """
  3. Remove and return an arbitrary set element. #随机删除一个元素,并将这个元素返回
  4. Raises KeyError if the set is empty.
  5. """
  6. pass
  1. def remove(self, *args, **kwargs):
  2. """
  3. Remove an element from a set; it must be a member. #删除一个指定的元素,如果该元素不存在就会报错
  4.  
  5. If the element is not a member, raise a KeyError.
  6. """
  7. pass
  1. def discard(self, *args, **kwargs):
  2. """
  3. Remove an element from a set if it is a member. #删除指定的元素,如果该元素不存在,不会报错
  4.  
  5. If the element is not a member, do nothing.
  6. """
  7. pass

    案例:

  1.   #全部删除
      name = "jasonhy"
  2.   s = set(name)
  3.   s.clear()
  4.   print(s)
         输出结果是:
            set()
  1.  #随机删除,并将删除的值返回
     name = "jasonhy"
  2.  s = set(name)
  3.  vstr = s.pop()
  4.  print(vstr,s)
        输出结果是:
           y {'n', 's', 'h', 'j', 'a', 'o'}
  1.  #如果元素存在就会报错,元素存在的情况
     name = "jasonhy"
  2.  s = set(name)
  3.  s.remove("j")
  4.  print(s)
        输出结果是:
           {'s', 'h', 'o', 'n', 'y', 'a'}
     
  1.  #元素不存在的情况
     name = "jasonhy"
  2.  s = set(name)
  3.  s.remove("J")
  4.  print(s)
        输出结果是:
           KeyError: 'J'
  1.  #元素存不存在都不会报错
     name = "jasonhy"
  2.  s = set(name)
  3.  s.discard("j")
  4.  print(s)
        输出结果是:
           {'s', 'n', 'y', 'h', 'a', 'o'}

    功能三:运算

  1. #求两个集合的交集,符号是&
      def intersection(self, *args, **kwargs):
  2. """
  3. Return the intersection of two sets as a new set. #返回两个集合的交集部分
  4.  
  5. (i.e. all elements that are in both sets.)
  6. """
  7. pass
  1. #求两个集合的并集,符号|
     def union(self, *args, **kwargs):
  2. """
  3. Return the union of sets as a new set. #返回两个集合的并集
  4.  
  5. (i.e. all elements that are in either set.)
  6. """
  7. pass
  1. #求两个集合的差集,符号-
     def difference(self, *args, **kwargs):
  2. """
  3. Return the difference of two or more sets as a new set. #返回集合不同的部分
  4.  
  5. (i.e. all elements that are in this set but not the others.) #比如集合:SA - SB那么返回的集合就只能是SA里面的
  6. """
  7. pass
  1. #求交叉补集,符号^
     def symmetric_difference(self, *args, **kwargs):
  2. """
  3. Return the symmetric difference of two sets as a new set. #返回集合不同的部分
  4.  
  5. (i.e. all elements that are in exactly one of the sets.) #比如集合SA^SB,返回的集合只能属于这两个集合中的一个,不能同时属于两个
  6. """
  7. pass

   

  1. #求差集之后更新原来集合
     def difference_update(self, *args, **kwargs):
  2. """ Remove all elements of another set from this set. """
  3. pass

   案例:

  1.  #交集
     name = "jasonhy"
  2.  s = set(name)
  3.  sother = set("jasonhyJASONHY")
  4.  print(s & sother)
        输出结果是:
           {'s', 'o', 'h', 'a', 'n', 'j', 'y'}
  1. #并集
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. print(s | sother)
       输出结果是:
          {'o', 'Y', 'O', 'A', 'N', 'a', 'J', 'h', 'n', 'H', 'y', 's', 'S', 'j'}
  1. #差集
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. print(sother - s)
       输出结果是:
          {'S', 'Y', 'O', 'A', 'J', 'H', 'N'}
  1. #交叉补集
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. print(s ^ sother)
       输出结果是:
          {'H', 'S', 'J', 'O', 'Y', 'A', 'N'}
  1. #差值之后更新sother
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. sother.difference_update(s)
  5. print(sother)
       输出结果是:
          {'A', 'J', 'S', 'N', 'Y', 'O', 'H'}

    功能四:判断集合之间的关系

  1. def issubset(self, *args, **kwargs):
  2. """ Report whether another set contains this set. """ #另外一个集合是否包含这个集合
  3. pass
      
  1. def issuperset(self, *args, **kwargs):
  2. """ Report whether this set contains another set. """ #这个集合是否包含另外一个集合
  3. pass
  1. def isdisjoint(self, *args, **kwargs):
  2. """ Return True if two sets have a null intersection. """ #两个集合是否有交集,如果没有交集,返回True
  3. pass
  1.  

   案例:

  1.  #判断s是否是sother的ziji
     name = "jasonhy"
  2.  s = set(name)
  3.  sother = set("jasonhyJASONHY")
  4.  print(s.issubset(sother))
        输出结果是:
           True
  1. #判断sother是否是s的父集
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. print(sother.issuperset(s))
        输出结果是;
           True
  1. #判断两个集合是否有交集,有的话返回False
    name = "jasonhy"
  2. s = set(name)
  3. sother = set("jasonhyJASONHY")
  4. print(sother.isdisjoint(s))
        输出结果是:
           False

   frozenset()来创建

  1.   name = "jasonhy"
  2.   sthis = frozenset(name)
  3.   print(sthis)
         输出结果是:
            frozenset({'a', 'n', 'j', 'y', 'o', 'h', 's'})

    和set()创建不同的是,它不具备删除和添加元素的功能,其他功能和set()的功能一样的

      

第四节 Python基础之数据类型(集合)的更多相关文章

  1. 第一节 Python基础之数据类型(整型,布尔值,字符串)

    数据类型是每一种语言的基础,就比如说一支笔,它的墨有可能是红色,有可能是黑色,也有可能是黄色等等,这不同的颜色就会被人用在不同的场景.Python中的数据类型也是一样,比如说我们要描述一个人的年龄:小 ...

  2. Python基础之数据类型

    Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...

  3. Python基础篇(set集合)

    Python基础篇(set集合,深浅拷贝) set集合是Python的一个基本类型,一般是不常用.set中的元素是不重复的.无序的里边 的元素必须是可hash的比如int,str,tuple,bool ...

  4. 第二章:python基础,数据类型

    """第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...

  5. python基础一数据类型之字典

    摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...

  6. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

  7. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  8. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  9. python 基础操作--数据类型

    一.变量 1.定义:将运算的中间结果暂存到内存,以便后续程序调用. 2.命名规则 1.变量由字母.数字.下划线搭配组合而成: 2.不可以用数字开头,也不能全都是数字: 3.不能是python 关键字, ...

随机推荐

  1. C#中异步使用及回调

    1. 一句话理解异步 我叫你去吃饭,叫完你不去,那我就会一直等你,直到你和我一起去吃饭.这叫同步! 我叫你去吃饭,叫完不管你去不去,我都不会等你,我自己去吃饭.这叫异步! 2. 异步使用 static ...

  2. vue created中初始化属性

    created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图. mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作

  3. 马凯军201771010116《面向对象与程序设计Java》第十二周学习总结

    一.理论与知识学习部分 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类. 大部分AWT组件都 ...

  4. php优秀框架codeigniter学习系列——CI_Loader类分析

    这是一个加载视图和文件的类. __construct() 设置视图文件的路径,和获取输出缓冲级别. initialize() 该方法只会被CI_Controller调用一次,会调用 $this-> ...

  5. winform devexpress 用法汇总

    废话不多说先上图 1.封装分页控件 qrcodeOnPage1.SearchData(gridControl2, IDataPage, sWhere, "", "tb_o ...

  6. 2017年5月11日17:43:06 rabbitmq 消费者队列

    从昨天开始发现个问题,一个接口在本地调用时大部分正常,一旦在生成者打一个断点调试,并且在promotion也打断点的时候会出现没有返回channel的异常,然后消费者就再也消费不了了 16:57:45 ...

  7. php 调用接口

    1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...

  8. js实现软键盘

    <p><img id="img" onclick="javascript:var s=document.createElement('script'); ...

  9. 20个可用于商业用途的免费 CC0 授权的高分辨率图库

    如今国人已经越来越重视版权了. 而用CC0 授权的图片不用担心版权的问题,那么什么是CC0授权呢?简单来说就是「公共领域贡献宣告」授权,当创作者在自身作品使用 CC0 授权时,代表于符合法律规定的最大 ...

  10. USB接口禁用与启用

    前几天闺蜜淘了一台小本,但是发现计算机USB接口是禁用的,有点头疼,所以问了万能的度娘,找到了n种办法.不过这一种是适用于我的情况,简单记录一下. 解决方法:(主要就是修改注册表) 1.打开注册表编辑 ...