zoukankan      html  css  js  c++  java
  • 基本数据类型之集合和字符编码

    一 集合

    1、定义

      {}内用逗号分隔开多个元素,元素满足下列条件:

        a、集合内元素为不可变型

          print(set([1,1,1,1,1,1,[11,222]]) #报错

        b、集合内元素无序

        c、集合内元素不能重复,重复的元素只算一个

    2、内置方法

    ==============关系运算=============

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}

      a、取交集:两个集合相同的元素

        res = friends1 & friends2

      b、取并集/合集:两集合所有的元素

        res = friends1 | friends2

      c、取差集:一个集合里取出共有的元素,剩下来的为差集

        friends1 的:res = friends1 - friends2

        friends2 的:res = friends2 - friends1

      d、对称差集:两个集合独有的元素,即去除共同的元素

        res = friends1 ^ friends2

      e、父子集

        1、s1:{1,2,3}

           s2:{1,2,4}  #不存在包含关系

        print(s1>s2)  #False

        2、只有当集合s2从属于s1的时候,s1才能成为s2的父集

          当s1=s2时,则互为父子集

    ================去重===============

      只针对不可变型,无法保证原来的顺序

    l=[
        {'name':'lili','age':18,'sex':'male'},
        {'name':'jack','age':73,'sex':'male'},
        {'name':'tom','age':20,'sex':'female'},
        {'name':'lili','age':18,'sex':'male'},
        {'name':'lili','age':18,'sex':'male'},
    ]
    new_l=[]
    for dic in l:
        if dic not in new_l:
            new_l.append(dic)

    print(new_l)
     

    ####其他内置方法

    s={1,2,3}
    需要掌握的内置方法
      1:discard
        s.discard(4)   # 删除元素不存在do nothing
        print(s)
        s.remove(4)   # 删除元素不存在则报错
      2:update
        s.update({1,3,5})
        print(s)
      3:pop
        res=s.pop()
        print(res)
      4:add
        s.add(4)
         print(s)
     

    二 字符编码

    详情参考:https://zhuanlan.zhihu.com/p/108805502

    ##分析过程

      x="上"
                        内存
    上-------翻译-----》0101010
    上《----翻译《-----0101010
     
    字符编码表就是一张字符与数字对应关系的表
     
     
    a-00
    b-01
    c-10
    d-11
     
    ASCII表:
        1、只支持英文字符串
        2、采用8位二进制数对应一个英文字符串
     
    GBK表:
        1、支持英文字符、中文字符
        2、
        采用8位(8bit=1Bytes)二进制数对应一个英文字符串
        采用16位(16bit=2Bytes)二进制数对应一个中文字符串
     
     

    unicode(内存中统一使用unicode):

        1、
            兼容万国字符
            与万国字符都有对应关系
        2、
        采用16位(16bit=2Bytes)二进制数对应一个中文字符串
        个别生僻会采用4Bytes、8Bytes
     
     
        unicode表:
                              内存
            人类的字符---------unicode格式的数字----------
                                 |                     |
                                 |                     |
                                 |
                                硬盘                    |
                                 |
                                 |                     |
                                 |                     |
                            GBK格式的二进制       Shift-JIS格式的二进制
     
            老的字符编码都可以转换成unicode,但是不能通过unicode互转
     
     
    utf-8:
        英文->1Bytes
        汉字->3Bytes
     
     
     

    结论:

        1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
            英文+汉字-》unicode-》gbk
            英文+日文-》unicode-》shift-jis
            万国字符》-unicode-》utf-8
     
        2、文本文件存取乱码问题
            存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
            取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存
     
     
     

    其他内置方法
    s={1,2,3}
    需要掌握的内置方法1discard
    s.discard(4) # 删除元素不存在do nothing
    print(s)
    s.remove(4) # 删除元素不存在则报错


    需要掌握的内置方法2update
    s.update({1,3,5})
    print(s)

    需要掌握的内置方法3pop
    res=s.pop()
    print(res)

    需要掌握的内置方法4add
    s.add(4)
    print(s)
  • 相关阅读:
    The Future of Middleware and the BizTalk Roadmap
    FW: How to spawn a process that runs under the context of the impersonated user in Microsoft ASP.NET pages
    Strips illegal Xml characters
    luogu P2280 激光炸弹(二维前缀和)
    luogu P2704 炮兵阵地(经典状态压缩DP)
    SP1716 GSS3 Can you answer these queries III (线段树维护最大连续子段和)
    二分图判定、匹配问题
    C++语法综合 | 基于char*设计一个字符串类MyString
    luogu P1044 火车进出栈问题(Catalan数)
    C++设计模式 | 三种设计模式基础
  • 原文地址:https://www.cnblogs.com/NevMore/p/12482319.html
Copyright © 2011-2022 走看看