Python基础学习笔记(07)基础类型操作及转化、编码

Python基础学习(07)

一、今日内容大纲

  • 基础数据类型的补充
  • 数据类型之间的转换
  • 编码的进阶

二、基础数据类型的补充

  1. str 操作的补充

    • capitalize 函数:首字母大写

      print(s1.capitalize())                              # result: Raigor
      
    • swapcase 函数:大小写反转

      print(s1.swapcase())                                # result: rAIgOR
      
    • title 函数:每个单词的首字母大写(非字母隔开的字母算作一个单词)

      msg = 'i love1yOU'
      print(msg.title())                                  # result: I Love1You
      
    • center 函数:居中

      print(s1.center(20,'*'))                            # 设置*为填充字符,总长度20
      print(s1.center(20))                                # 未设置填充字符,总长度20
      # result:
      # *******RaiGor*******
      #        RaiGor
      
    • find 函数:通过元素寻找索引,找到第一个就返回字符位置,找不到返回-1

      s1 = 'iseedeadpeople'
      print(s1.find('i'),s1.find('z'),s1.find('e'))       # result: 0 -1 2
      
    • index 函数:通过字符串寻找索引,返回第一个字符的位置,找不到会报错,可规定开始位置

      s1 = 'iseedeadpeople'
      print(s1.index('see'))                              # result: 1
      print(s1.index('see',2))                            # result: ValueError: substring not found
      
  2. tuple 操作的补充

    • 元组中如果只有一个元素且没有逗号,那么他不是元组,它与括号内的元素数据类型相同

      tu1 = (1)
      tu2 = (1,)
      tu3 = ([1,2,3])
      tu4 = ('string')
      print(tu1, type(tu1))                   			# result: 1 <class 'int'>
      print(tu2, type(tu2))                   			# result: (1,) <class 'tuple'>
      print(tu3, type(tu3))                   			# result: [1, 2, 3] <class 'list'>
      print(tu4, type(tu4))                   			# result: string <class 'str'>
      
    • index 函数:通过元素寻找索引,找到第一个位置返回(未找到会报错)

      tu = (1,2,2,2,2,3,4)
      print(tu.index(5))                      			# result: ValueError: tuple.index(x): x not in tuple
      
    • count 函数:获取某元素在列表中出现的次数

      tu = (1,2,2,2,2,3,4)
      print(tu.count(2))                     				 # result: 4
      
  3. list 操作的补充

    • count 函数、index 函数:操作同上

    • sort 函数:对源列表进行排序(默认从小到大)

      l1 = [5, 4, 3, 7, 8, 6, 1, 9]
      l1.sort()                               			# 默认从小到大排序
      print(l1)                               			# result: [1, 3, 4, 5, 6, 7, 8, 9]
      l1.sort(reverse = True)                 			# 添加reverse = True实现从大到小排序
      print(l1)                               			# result: [9, 8, 7, 6, 5, 4, 3, 1]
      
    • reverse 函数:对源列表将进行翻转操作

      l1 = [5, 4, 3, 7, 8, 6, 1, 9]
      l1.reverse()
      print(l1)                               			# result: [9, 1, 6, 8, 7, 3, 4, 5]
      
    • 列表可以进行相加、数乘等操作(3.4 以上版本支持)

      l1 = [1, 2, 3]
      l2 = ['A', 'B']
      print(l1 + l2)                          			# result: [1, 2, 3, 'A', 'B']
      print(l1 * 2)                          				# result: [1, 2, 3, 1, 2, 3]
      
    • 典型例题:

      l1 = [11, 22, 33, 44, 55]							# 将索引为奇数的元素删除
      
      # 方法一:笨(可以思维置换直接取偶数加入新列表中)
      temp_li = []
      for i in range(len(l1)):
          if i % 2 == 1:
              temp_li.append(l1[i])
      for i in temp_li:
          if i in l1:
              l1.remove(i)
      print(l1)
      
      # 方法二:最简单
      del l1[1::2]
      print(l1)
      
      # 方法三:倒序删除
      for i in range(len(l1) - 1, -1, -1):
          if i % 2 == 1:
              l1.pop(i)
      print(l1)
      
  4. dict 操作的补充

    • popitem 函数:3.5 版本之前是随机删除,3.6 版本以后是删除最后一个元素,有返回值(基本用不到)

    • update 函数:可以修改、增加键值对

      dic = {'name': 'Raigor', 'age': 18}
      dic.update(hobby='运动',height='175')                # 可以增加新的键值对
      dic.update(age=100)                                  # 可以修改原有键值对
      dic.update(((1,'a'),('name','0'),('hobby',0)))       # 另一种批量更新键值对方式(外面括号tuple和list都可以)
      print(dic)
      # result: {'name': '0', 'age': 100, 'hobby': 0, 'height': '175', 1: 'a'}
      
      dic1 = {1 : 1}
      dic2 = {1 : 2}
      dic1.update(dic2)                                    # update 甚至可以利用另一个字典更新原有字典
      print(dic1)                                          # result: {1: 2}
      
    • fromkeys 函数:将可迭代对象共用一个值

      dic = dict.fromkeys('abc', 100)
      print(dic)                                           # result: {'a': 100, 'b': 100, 'c': 100}
      

      另有一基于fromkeys 的练习题:

      dic = dict.fromkeys([1,2,3],[])
      dic[1].append(666)                                   # 公用一个值!
      print(dic)                                           # result: {1: [666], 2: [666], 3: [666]}
      
    • 典型例题:

      dic = {'k1': '太白', 'k2': 'barry', 'k3': '拜拜', 'age': 18}
      # 将字典中键含有'k'元素的键值对删除
      
      # 方法一:
      temp_dic = {}
      for key in dic.keys():
          if not 'k' in key:
              temp_dic.setdefault(key, dic[key])
      dic = temp_dic
      # print(dic)
      
      # 方法二:(有疑问!!!!)                 			   # 字典不可迭代过程中改变长度
      dic_keys = list(dic.keys())
      for key in dic_keys:
          if 'k' in key:
              dic.pop(key)
      print(dic)
      

三、数据类型的转换

  1. bool 的转换

    • 下列值都可以转换为bool 数据类型的False:

      '', 0, (), {}, [], set(), None
      
    • 其余的值转化为bool 数据类型都为True

  2. 基础数据类型的存储空间占用(从低到高)

    # int(float)
    # str
    # set:无序,即无序存索引相关信息
    # tuple:有序,需要存储索引相关信息,不可变
    # list:有序,需要存储索引相关信息,可变,需要处理数据的增删改
    # dict:有序,需要存储key和value映射的相关信息,可变,需要处理数据的增删改(3.6 之后有序)
    

四、编码的进阶

  • 数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(UTF-8, GBK 等等),故在读取、存储等操作中,都存在编码之间的相互转换,故在计算机中存在唯一非Unicode 编码的特殊数据类型bytes,用来充当存储、读取操作与内存数据之间的媒介:

    content = 'hello'											# bytes:特殊的非Unicode数据类型,它的基本用法与str基本一致
    b = b'hello'
    print(b,type(b))                    						# result: b'hello' <class 'bytes'>
    print(b.upper(),type(b.upper()))    						# result: b'HELLO' <class '   bytes'>
    
    s1 = '中国'
    b = s1.encode('utf-8')               						# 编码 str -> bytes
    s = b.decode('utf-8')                						# 解码 bytes -> str
    print(b,s) 													# result: b'xe4xb8xadxe5x9bxbd' 中国
    
  • 不同非 Unicode 之间编码方式的转化:以 gbk 转为 utf-8 为例

    # gbk -> utf-8
    b1 = b'xd6xd0xb9xfa'
    s = b1.decode('gbk')
    u = s.encode('utf-8')
    print(u)                              						# result: b'xe4xb8xadxe5x9bxbd'
    
原文地址:https://www.cnblogs.com/raygor/p/13236918.html