数据类型

01 今日内容大纲

  1. 基础数据类型的补充

  2. 数据类型之间的转换

  3. 编码的进阶

02 昨日内容回顾以及作业讲解

  1. id == is:

    • == :数值是否相同 is:内存地址,id 获取对象的内存地址

  2. 代码块:一个文件,交互式命令一行就是一个代码块。

  3. 同一代码块下缓存机制(字符串驻留机制):

    • 所有数字,bool 几乎所有的字符串

    • 优点:提升性能,节省内存空间。

  4. 不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间存储-5~256的int,一个空间存储一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。

    • -5~256 int,bool,满足一定规则的字符串。

    • 优点:提升性能,节省内存空间。

  5. 集合:列表去重,关系测试 交并差。

  6. 深浅copy:

    • 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素共用一个。

     

 

 

 

03 具体内容

  • 数据类型的补充

    • str

       1  # str :补充的方法练习一遍就行。
       2  # s1 = 'taiBAi'
       3  # capitalize 首字母大写,其余变小写
       4  # print(s1.capitalize())
       5  # swapcase  大小写翻转
       6  # print(s1.swapcase())
       7  # title
       8  # msg= 'taibai say3hi'
       9  # print(msg.title()) #每个单词的首字母大写
      10 11  s1 = 'barry'
      12  # 居中
      13  # print(s1.center(20))
      14  # print(s1.center(20,'*'))
      15 16  # find :通过元素找索引,找到第一个就返回,找不到 返回-1
      17  # index:通过元素找索引,找到第一个就返回,找不到 报错
      18  # print(s1.find('a'))
      19  # print(s1.find('r'))
      20  # print(s1.find('o'))
      21  # print(s1.index('o'))
    • 元组

       1  # tuple
       2  # 元组中如果只有一个元素,并且没有逗号,那么它不是元组,它与改元素的数据类型一致。 ***
       3  # tu1 = (2,3,4)
       4  # tu1 = (2)
       5  # tu1 = ('太白')
       6  # tu1 = ([1,2,3])
       7  # tu1 = (1,)
       8  # print(tu1,type(tu1))
       9  # tu = (1,2,3,3,3,2,2,3,)
      10  # # count 计数
      11  # print(tu.count(3))
      12  # tu = ('太白', '日天', '太白')
      13  # # index
      14  # print(tu.index('太白'))

       

       

    • 列表

       1  # l1 = ['太白', '123', '女神', '大壮']
       2  # count pass
       3  # index
       4  # print(l1.index('大壮'))
       5  # sort  **
       6  # l1 = [5, 4, 3, 7, 8, 6, 1, 9]
       7  # # l1.sort()  # 默认从小到大排序
       8  # # l1.sort(reverse=True)  # 从大到小排序  **
       9  # l1.reverse()  # 反转  **
      10  # print(l1)
      11  # 列表可以相加
      12  # l1 = [1, 2, 3]
      13  # l2 = [1, 2, 3, '太白', '123', '女神']
      14  # print(l1 + l2)
      15 16  # 列表与数字相乘
      17  # l1 = [1, 'daf', 3]
      18  # l2 = l1*3
      19  # print(l2)
      20 21  l1 = [11, 22, 33, 44, 55]
      22  # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。
      23  #  *** 重要
      24  # 正常思路:
      25  # 先将所有的索引整出来。
      26  # # 加以判断,index % 2 == 1: pop(index)
      27  # for index in range(len(l1)):
      28  #     if index % 2 == 1:
      29  #         l1.pop(index)
      30  # print(l1)
      31  # 列表的特性:
      32  # l1 = [11, 22, 33, 44, 55]
      33  # 最简单的:
      34  # del l1[1::2]
      35  # print(l1)
      36  # l1 = [11, 22, 33, 44, 55]
      37  # # 倒序法删除元素
      38  # for index in range(len(l1)-1,-1,-1):
      39  #     if index % 2 == 1:
      40  #         l1.pop(index)
      41  # print(l1)
      42 43  # 思维置换
      44  # l1 = [11, 22, 33, 44, 55]
      45  # new_l1 = []
      46  # for index in range(len(l1)):
      47  #     if index % 2 ==0:
      48  #         new_l1.append(l1[index])
      49  # # print(new_l1)
      50  # l1 = new_l1
      51  # print(l1)
      52 53  # 循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。
      54

       

    • 字典

       1  # 字典的补充
       2  # update ***
       3  # dic = {'name': '太白', 'age': 18}
       4  # # dic.update(hobby='运动', hight='175')
       5  # # dic.update(name='太白金星')
       6  # dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])  # 面试会考
       7  # print(dic)
       8  # dic1 = {"name":"jin","age":18,"sex":"male"}
       9  # dic2 = {"name":"alex","weight":75}
      10  # dic1.update(dic2)  # 更新,有则覆盖,无责添加
      11  # print(dic1)  # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75}
      12  # print(dic2)
      13 14  # fromkeys
      15  # dic = dict.fromkeys('abc', 100)
      16  # dic = dict.fromkeys([1, 2, 3], 'alex')
      17  # 坑:值共有一个,面试题
      18  # dic = dict.fromkeys([1,2,3],[])
      19  # dic[1].append(666)
      20  # print(dic)
      21  dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
      22  # 将字典中键含有'k'元素的键值对删除。
      23  # for key in dic:
      24  #     if 'k' in key:
      25  #         dic.pop(key)
      26  # print(dic)
      27 28  # 循环一个字典时,如果改变这个字典的大小,就会报错。
      29  # l1 = []
      30  # for key in dic:
      31  #     if 'k' in key:
      32  #         l1.append(key)
      33  # print(l1)
      34  # for i in l1:
      35  #     dic.pop(i)
      36  # print(dic)
      37 38  # for key in list(dic.keys()):  # ['k1', 'k2', 'k3','age']
      39  #     if 'k' in key:
      40  #         dic.pop(key)
      41  # print(dic)

       

       

  • 数据类型的转换

     
    1 # 0,''(),[],{},set(),None  转换成bool值为False

     

  • 数据类型的分类(了解)

     

  • 编码的进阶

    • 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'xe4xb8xadxe5x9bxbd'

 

1  # str ---> bytes
2  # s1 = '中国'
3  # b1 = s1.encode('utf-8')  # 编码
4  # print(b1,type(b1))  # b'xe4xb8xadxe5x9bxbd'
5  # # b1 = s1.encode('gbk')  # 编码  # b'xd6xd0xb9xfa' <class 'bytes'>
6  # # bytes---->str
7  # b1 = b'xe4xb8xadxe5x9bxbd'
8  # s2 = b1.decode('utf-8')  # 解码
9  # print(s2)
 
1  # gbk ---> utf-8
2  b1 = b'xd6xd0xb9xfa'
3  s = b1.decode('gbk')
4  # print(s)
5  b2 = s.encode('utf-8')
6  print(b2)  # b'xe4xb8xadxe5x9bxbd'

 

 

04 今日总结

  • 数据类型的补充: list(sort,revrse,列表的相加,乘,循环问题),dict (update 循环问题) ***

  • 编码的进阶:

    • bytes为什么存在?

    • str --->bytes(Unicode ---> 非Unicode)

    • gbk <-----> utf-8

05 预习内容

预习内容:

文件操作,博客地址:http://www.cnblogs.com/jin-xin/articles/8183203.html

原文地址:https://www.cnblogs.com/zhangxiangning/p/10207737.html