• python集合、字符编码、bytes与二进制


    集合

      用括号表示{ },可以包含多个元素,用逗号分割

    用途

      用于关系运算

    集合特点

    1.每个元素是不可变类型
    
    2.没有重复的元素
    
    3.无序
     

    应用

    1.set去重

    set(names)的功能是将列表转换成集合,并去除重复值
    但是因为集合里面的元素时不可变的,所以set在去重时对象所包含的值不能有不可变类型,例如不能有 [ ]{ }
    names=['zhangsan','lisi','wangwu','zhangsan','zhaoliu']
    s=set(names)
    print(s)
    E:PycharmProjectsuntitledvenvScriptspython.exe E:/PycharmProjects/untitled/平时问题积累.py
    {'zhangsan', 'lisi', 'zhaoliu', 'wangwu'}

     2.合集功能

    pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
    linuxs={'wupeiqi','oldboy''gangdan',}
    # 1.长度
    print(len(pythons))
    # 2.成员运算 True  False
    print('alex' in pythons)
    # 3.并集(2个变量合并,重复元素只取一个)
    print(pythons | linuxs)
    
    # 4.交集( 取出同值)
    print(pythons & linuxs)
    # 5.对称差集(剔除共同值,合并其他值)
    print(pythons ^ linuxs)
    
    # 5.差集(左-右 剔除右边元素里面和左相同值 ,最后打印左边剩余的)
    print(pythons - linuxs)
    E:PycharmProjectsuntitledvenvScriptspython.exe E:/PycharmProjects/untitled/平时问题积累.py
    6
    True
    {'yuanhao', 'oldboygangdan', 'alex', 'gangdan', 'wupeiqi', 'egon', 'biubiu'}
    {'wupeiqi'}
    {'yuanhao', 'oldboygangdan', 'egon', 'alex', 'biubiu', 'gangdan'}
    {'yuanhao', 'egon', 'biubiu', 'alex', 'gangdan'}
    
    
    s1={1,2,3,4,5}
    s2={1,2,3,}
    # 6.相等
    print(s1 == s2)
    # 7.父集(包含关系)
    print(s1 >= s2)
    # 8.父集(被包含关系)
    print(s2 <= s1)
    
    E:PycharmProjectsuntitledvenvScriptspython.exe E:/PycharmProjects/untitled/平时问题积累.py
    False
    True
    True

    字符编码

    如何理解字符编码:将人类的字符编码/转换成计算机能识别的数字,这种转换必须遵循一套固定的标准,

    该标准无非是,人类字符与数字的对应关系,称之为字符编码表。

    A---->0000 0000      bit:是二进制位   byte:字节
    B---->0000 0001
    c---->0000 0002
    d---->0000 0003

    unicode与utf-8理解

    1个英文字母=8bit=1bytes
    
    英文字符:ASCII码表:用1Bytes表示一个英文字符
         1英文字符=8bit=1Bytes
    
    中文字符:GBK:用2Bytes表示一个中文字符,1Bytes去表示英文字符
    
    unicode:内存中使用的是unicode编码,unicode把全世界的字符都建立好对应关系
              用2Bytes去表示一个字符
    
    utf-8 #unicode tranform format-8
    utf-8 用1Bytes表示英文,用3Bytes表示中文

    字符编码需要记住的概念:

    01:内存中固定使用unicode编码,我们唯一可以改变的存储到硬盘时使用的编码
    
    02: 要想保证存取文件不乱乱码,应该保证文档当初是以什么编码格式存的,就应该以什么编码格式去读取

    字符编码应用:

    1)pyhton2

    在python2中有两种字符串编码格式
            1、unicode:
                x=u''    x为unicod类型
            2、unicode编码后的结果
                x='' #如果文件头为coding:utf-8,那么"上"被存成utf-8格式的二进制      x为str类型
    
        在python3只有一种字符串编码格式:
            1、unicode
                x='上’    x为str类型

    书写

    #***
    #coding:gbk
    x='上’
    x.decode('gbk')
    
    #coding:gbk
    x=u''
    x.encode('gbk')
    x.encode('utf-8')

    理解编码与解码

    unicode-------编码encode-------->gbk
    unicode<-------解码decode--------gbk

    2)Python3

       在python3中(*****)
        x=''
        x只能进行编码
        x.encode('gbk')

    3)Pyhton2与Python3使用总结

    总结python2与python3:
            (***)
            在python2中的字符粗类型str都是unicode按照文件头的指定的编码,编码之后的结果
            在python2中也可以制造unicode编码的字符串。需要在字符串前加u
    
            (*****)
            在python3中的字符串类型str都是unicode编码的
            所以python3中的字符串类型可以编码成其他字符编码格式,编码的结果
            是bytes类型

    Bytes类型与二进制的演变:

    #看“中”bytes—二级制之间的转换
    res=''.encode('utf-8')
    print(res)  #b'xe4xb8xad'
    
    #循环取出这个bytes
    for i in b'xe4xb8xad':
        print(i)
    '''
    228
    184
    173
    
    '''
    
    
    #发现字符“中”由三个3位数据构成,即228 184 173,
    # 将其转化成二进制格式
    print(bin(228)) #0b11100100
    print(bin(184)) #0b10111000
    print(bin(173)) #0b10101101
    
    
    #二进制,即在计算机中的存储方式
    #发现字符“中”的utf-8编码方式为:11100100 10111000 10101101,这也是它在计算机中存储的方式。
    
    
    
    #ASCII码能够表示的字符(0-9a-zA-Z及一些标点符号转义字符等)转化成utf-8码不发生改变,因为utf-8编码是ASCII编码的超集。
    
    res1='afAFA!@#'.encode('utf-8')  #b'afAFA!@#'
    print(res1)
    
    #而实际上存储的是各字符的ASCII码值:
    
    for j in b'afAFA!@#':
         print(j)
    '''
    97
    102
    65
    70
    65
    33
    64
    35
    
    '''

     

  • 相关阅读:
    Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
    CentOS7.7 yum安装新版git
    CentOS使用epel安装不同版本php-fpm
    ubuntu16.04安装mysql5.6
    阿里云Confluence无法发送邮件修复
    windowserver 2012安装openssh
    linux增加history时间戳
    SQL Server 2008R2各个版本,如何查看是否激活,剩余可用日期?
    nginx增加访问验证
    mysql5.6和5.7的权限密码设置
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9123061.html
Copyright © 2020-2023  润新知