第二章 集合 字符编码

集合


定义:有一个或多个确定的元素所构成的整体叫做集合.
特征:

1. 确定性(元素必须可hsah)
2. 互异性(去重)
3. 无序性(集合中的元素没有先后之分)

集合存在的意义就在于去重和关系运算

集合的创建:

  • s = {} 创建一个字典
  • s = {1} 创建一个集合

集合的关系运算

  • 交集
    • 取出两个集合中共有的元素
    • s.intersection(s1)
    • s & s1
  • 差集
    • s.difference(s1)
    • s - s1
    • 从s中把s1中有的元素都去掉,通俗来讲就是:你有的我通通不要.
  • 并集
    • s.union(s1)
    • s | s1
    • 合并s和s1成一个新的集合
  • 对称差集
    • s.symmetric_difference(s1)
    • s ^ s1
    • 合并s和s1,并且去掉两个共有的元素成一个新集合
  • 包含关系
    • 两个集合之间一般有三种关系,相交,包含,不相交.
      • set.isdisjoint(s) 判断两个集合是不是不想交
      • set.issuperset(s) 判断集合是不是包含其他集合,等同意 a<=b
      • set.issubset(s) 判断集合是不是被其他集合包含,等同于a<=b

字符编码


看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况

  • ASCII 占1个字节,只支持英文
  • GB2312 占2个字节,支持6700+汉字
  • GBK GB2312的升级版,支持21000+汉字
  • Shift-JIS 日本字符
  • ks_c_5601-1987 韩国编码
  • TIS-620 泰国编码

由于每个国家都有自己的字符,所以其对应关系也涵盖了自己国家的字符,但是以上编码都存在局限性,即:仅涵盖本国字符,无其他国家字符的对应关系。应运而生出现了万国码,他涵盖了全球所有的文字和二进制的对应关系,

Unicode 2-4字节 已经收录136690个字符,并还在一直不断扩张中...

  • Unicode 起到了2个作用:

直接支持全球所有语言,每个国家都可以不用再使用自己之前的旧编码了,用unicode就可以了。(就跟英语是全球统一语言一样)
unicode包含了跟全球所有国家编码的映射关系,为什么呢?后面再讲
Unicode解决了字符和二进制的对应关系,但是使用unicode表示一个字符,太浪费空间。例如:利用unicode表示“Python”需要12个字节才能表示,比原来ASCII表示增加了1倍。

由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!

为了解决存储和网络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode中的进行转换,以便于在存储和网络传输时可以节省空间!

  • UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个
  • UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
  • UTF-32: 使用4个字节表示所有字符;

总结:UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案。

Python3的执行过程

  • 解释器找到代码文件,把代码字符串按文件头定义的编码加载到内存,转成unicode
  • 把代码字符串按照语法规则进行解释,
  • 所有的变量字符都会以unicode编码声明**

想在py3里看字符,必须得是unicode编码,其它编码一律按bytes格式展示。

最后再提示一下,Python只要出现各种编码问题,无非是哪里的编码设置出错了

常见编码错误的原因有:

  1. Python解释器的默认编码
  2. Python源文件文件编码
  3. Terminal使用的编码
  4. 操作系统的语言设置
  5. 掌握了编码之前的关系后,挨个排错就好啦 

小结扩展


基本数据类型

可变数据类型不可变数据类型
list 数字类(bool,int,float,complex)
dict str
set tuple
. frozenset

扩展数据类型collectins

  1. namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
  2. deque:双端队列,可以快速的从另外一侧追加和推出对象
  3. Counter:计数器,主要用来计数
  4. OrderedDict:有序字典
  5. defaultdict:带有默认值的字典

 

posted @ 2018-04-13 19:17  dc0012  阅读(175)  评论(0编辑  收藏  举报