欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基础数据类型补充以及编码进阶

程序员文章站 2022-06-22 12:43:10
01 内容大纲 1. 基础数据类型的补充 2. 数据类型之间的转换 3. 编码的进阶 02 具体内容: 数据类型的补充: str 元组 列表 字典 数据类型的转换 int bool str 三者转换 str list 两者转换 list set 两者转换 str bytes 两者转换 所有数据都可以 ......

01 内容大纲

  1. 基础数据类型的补充
  2. 数据类型之间的转换
  3. 编码的进阶

02 具体内容:

  • 数据类型的补充:

    • str

      # str :补充的方法练习一遍就行。
       s1 = 'taibai'
       # capitalize 首字母大写,其余变小写
       print(s1.capitalize())
      
       # swapcase  大小写翻转
       print(s1.swapcase())
      
       # title  每个单词的首字母大写
       msg= 'taibai say3hi'
       print(msg.title()) 
      
       s1 = 'barry'
       # center 居中:内同居中,总长度,空白处填充
       print(s1.center(20))
       print(s1.center(20,'*'))
      
       ##寻找字符串中的元素是否存在
       # find :通过元素找索引,找到第一个就返回,找不到 返回-1
       # index:通过元素找索引,找到第一个就返回,找不到 报错
       print(s1.find('a'))
       print(s1.find('r'))
       print(s1.find('o'))
       print(s1.index('o'))
    • 元组

      # tuple  元组中如果只有一个元素,并且没有逗号,那么它不是元组,它与该元素的数据类型一致。 ***【重点】
       tu1 = (2,3,4)
       tu1 = (2)
       tu1 = ('太白')
       tu1 = ([1,2,3])
       tu1 = (1,)
       print(tu1,type(tu1))
      
      # # count 计数  获取某元素在列表中出现的次数
       tu = (1,2,3,3,3,2,2,3,)
       print(tu.count(3))
      
      # # index  通过元素找索引(可切片),找到第一个元素就返回,找不到该元素即报错。
      tu = ('太白', '日天', '太白')
      print(tu.index('太白'))
      
    • 列表

      # count 统计某个元素在列表中出现的次数
        a = ["q","w","q","r","t","y"]
        print(a.count("q"))
      
      # index
       l1 = ['太白', '123', '女神', '大壮']
       print(l1.index('大壮'))
      
      # sort  **【重点】用于在原位置对列表进行排序
         l1 = [5, 4, 3, 7, 8, 6, 1, 9]
         l1.sort()  # 默认从小到大排序
         l1.sort(reverse=true)  # 从大到小排序  **
      
      # reverse **【重点】将列表中的元素反向存放
         l1.reverse()  # 反转  
         print(l1)
      
      # 列表可以相加
       l1 = [1, 2, 3]
       l2 = [1, 2, 3, '太白', '123', '女神']
       print(l1 + l2)
      
      # 列表与数字相乘
       l1 = [1, 'daf', 3]
       l2 = l1*3
       print(l2)
      
      循环列表,改变列表大小的问题:
       l1 = [11, 22, 33, 44, 55]
      # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。
      #  *** 重要
      # 正常思路:
      # 先将所有的索引整出来。
      # # 加以判断,index % 2 == 1: pop(index)
      # for index in range(len(l1)):
      #     if index % 2 == 1:
      #         l1.pop(index)
      # print(l1)
      
      ## 最简单的:
       l1 = [11, 22, 33, 44, 55]
       del l1[1::2]  #切片步长删除
       print(l1)
      
      ## 倒序法删除元素
       l1 = [11, 22, 33, 44, 55]
       for index in range(len(l1)-1,-1,-1):
           if index % 2 == 1:
               l1.pop(index)
       print(l1)
      
      # 思维置换:把索引为偶数的元素添加到一个新列表,在赋值给原列表
       l1 = [11, 22, 33, 44, 55]
       new_l1 = []
       for index in range(len(l1)):
           if index % 2 ==0:
               new_l1.append(l1[index])
       l1 = new_l1
       print(l1)
      
      #注意: 循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。
      
    • 字典

      # 字典的补充:
      # update ***
        dic = {'name': '太白', 'age': 18}
         #增:
        dic.update(hobby='运动', hight='175') 
         #改:
        dic.update(name='太白金星')
         ## 面试会考
        dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])  
        print(dic)
      
        # 更新,有则覆盖,无则添加
        dic1 = {"name":"jin","age":18,"sex":"male"}
        dic2 = {"name":"alex","weight":75}
        dic1.update(dic2)  
        print(dic1)  # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75}
        print(dic2)
      
      # fromkeys  创建一个字典:字典的所有键来自一个可迭代对象,字典的值使用同一个值
        dic = dict.fromkeys('abc', 100)
        dic = dict.fromkeys([1, 2, 3], 'alex')
      # 坑:值共用一个,面试题
       dic = dict.fromkeys([1,2,3],[])
       dic[1].append(666)
       print(dic)
      
      循环字典,改变字典大小的问题:
      dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
      # 将字典中键含有'k'元素的键值对删除。
      #错误做法:
      # for key in dic:
      #     if 'k' in key:
      #         dic.pop(key)
      # print(dic)
      
      # 循环一个字典时,如果改变这个字典的大小,就会报错。--->循环一个列表,然后对字典进行修改
      #1:
       l1 = []
       for key in dic:
           if 'k' in key:
               l1.append(key)
       print(l1)
       for i in l1:
           dic.pop(i)
       print(dic)
      
      #2:
       for key in list(dic.keys()):  # ['k1', 'k2', 'k3','age']
           if 'k' in key:
               dic.pop(key)
       print(dic)
      
  • 数据类型的转换

    • int bool str 三者转换

    • str list 两者转换

      • # str ---> list
        s1 = 'alex 太白 武大'
        print(s1.split())  # ['alex', '太白', '武大']
        
        # list ---> str  # 前提 list 里面所有的元素必须是字符串类型才可以
        l1 = ['alex', '太白', '武大']
        print(' '.join(l1))  # 'alex 太白 武大'
    • list set 两者转换

      • # list ---> set
        s1 = [1, 2, 3]
        print(set(s1))
        
        # set ---> list
        set1 = {1, 2, 3, 3,}
        print(list(set1))  # [1, 2, 3]
    • str bytes 两者转换

      • # str ---> bytes
        s1 = '太白'
        print(s1.encode('utf-8'))  # b'\xe5\xa4\xaa\xe7\x99\xbd'
        
        # bytes ---> str
        b = b'\xe5\xa4\xaa\xe7\x99\xbd'
        print(b.decode('utf-8'))  # '太白'
    • 所有数据都可以转化成bool值

      • 转化成bool值为false的数据类型有:'', 0, (), {}, [], set(), none
    
    
  • 数据类型的分类(了解)

    python基础数据类型补充以及编码进阶

  • 编码的进阶

    • ascii码:包含英文字母,数字,特殊字符与01010101对应关系。

      a 01000001 一个字符一个字节表示。

    • gbk:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。

      a 01000001 ascii码中的字符:一个字符一个字节表示。

      中 01001001 01000010 中文:一个字符两个字节表示。

    • unicode包含全世界所有的文字与二进制0101001的对应关系。

      a 01000001 01000010 01000011 00000001

      b 01000001 01000010 01100011 00000001

      中 01001001 01000010 01100011 00000001

    • utf-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。

      a 01000001 ascii码中的字符:一个字符一个字节表示。

      to 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。

      中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。

    1. 不同的密码本之间能否互相识别?-->不能。不同编码之间,不能直接互相识别。
    2. 数据在内存中全部是以unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非unicode编码(utf-8,gbk等等)

    英文:

    str: 'hello '

    ​ 内存中的编码方式: unicode

    ​ 表现形式: 'hello'

    bytes :

    ​ 内存中的编码方式: 非unicode

    ​ 表现形式:b'hello'

中文:

str:

​ 内存中的编码方式: unicode

​ 表现形式:'中国'

bytes :

​ 内存中的编码方式: 非unicode # utf-8

​ 表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'

注意:bytes类型也是python基础数据类型之一。bytes是非unicode编码的数据类型,除此之外,python中所有数据类型的编码均为unicode编码。

​ bytes类型也称作字节文本,他的主要用途就是网络的数据传输,与数据存储。

python基础数据类型补充以及编码进阶

        # str ---> bytes (unicode ---> 非unicode)  
         s1 = '中国'
         b1 = s1.encode('utf-8')  # 编码
         print(b1,type(b1))  # b'\xe4\xb8\xad\xe5\x9b\xbd'
         
         b1 = s1.encode('gbk')  # 编码  # b'\xd6\xd0\xb9\xfa' <class 'bytes'>
        
        # bytes---->str (非unicode ---> unicode) 
         b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
         s2 = b1.decode('utf-8')  # 解码
         print(s2)
        # gbk ---> utf-8
        b1 = b'\xd6\xd0\xb9\xfa'
        s = b1.decode('gbk')
        print(s)
        b2 = s.encode('utf-8')
        print(b2)  # b'\xe4\xb8\xad\xe5\x9b\xbd'
        
       
       # utf-8 ---> gbk
        b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
        s = b1.decode('utf-8')
        print(s)#中国
        b2 = s.encode('gbk')
        print(b2)  # b'\xd6\xd0\xb9\xfa'
        

03 总结

  • 数据类型的补充: list(sort,revrse,列表的相加,乘,循环问题),dict (update 循环问题) 【重点】***
  • 编码的进阶:
    • bytes为什么存在?
    • str --->bytes
    • gbk <-----> utf-8