• 第二章 集合 字符编码


    集合


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

    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:带有默认值的字典
  • 相关阅读:
    C++-POJ1020-Anniversary Cake[搜索][dfs]
    C++-POJ1988-Cube Stacking[数据结构][并查集]
    大佬的代码
    C++-POJ3349-Snowflake Snow Snowflakes[STL][set][hash未写]
    C++-POJ3274-Gold Balanced Lineup[hash]
    ListView 在设备切换横竖屏时保存状态
    Android Studio 常见命令
    android textView 总是有paddingtop怎么解决
    ionic build Android错误记录 error in opening zip file
    git grep 或者 ag 进行快速代码搜索
  • 原文地址:https://www.cnblogs.com/dc0012/p/8822971.html
Copyright © 2020-2023  润新知