返回顶部

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

1.字符串(str)的补充

  • capitalize() 首字母大写, 其余小写
    # str补充
    ​
    # s1 = "taiBai"
    # capitalize 首字母大写, 其余小写
    # print(s1.capitalize())  # Taibai
    ​
  • swapcase() 大小写反转
    s1 = "taiBai
    # swapcase 大小写反转
    # print(s1.swapcase())  # TAIbAI
  • title() 每个单词的首字母大写
    # title 每个单词的首字母大写
    # msg = 'taibai say3hi'
    # print(msg.title())  # Taibai Say3Hi
  • center() 居中
    # center 居中
    # s1 = 'barry'
    # print(s1.center(20, '='))
  • find index
    # find :通过元素找索引,找到第一个就返回,找不到 返回-1
    # index:通过元素找索引,找到第一个就返回,找不到 报错

2.列表(list) 的补充

  • index() 通过元素找索引
    # index
    l1 = ['太白', '123', '女神', '大壮']
    print(l1.index('123'))  # 通过元素找索引
  • sort() 排序
    # sort
    l1 = [5, 4, 3, 7, 8, 6, 1, 9]
    l1.sort()  # 默认从小到大, 升序
    l1.sort(reverse=True)  # 从大到小排序
    l1.reverse()  # 反转
    print(l1)
  • 列表也可以相加也可以和数字相加
    # 列表也可以相加
    l1 = [1, 2, 3]
    l2 = [1, 2, 3, '太白', '123', '女神']
    print(l1 + l2)  # [1, 2, 3, 1, 2, 3, '太白', '123', '女神']
    ​
    # 列表与数字相乘
    l1 = [1, 'daf', 3]
    l2 = l1 * 3
    print(l2)
  • 列表元素的删除
    # 列表的删除 循环一个列表时, 最好不要改变列表的大小, 这样会影响你的最终结果
    l1 = [11, 22, 33, 44, 55]
    # 索引为奇数的元素删除
    # 第一种最简单的方法
    del l1[1::2]
    print(l1)
    
    # 第二种倒序删除元素
    for index in range(len(l1)-1, -1, -1):  # 必须要加反向步长-1
        if index % 2 == 1:
            l1.pop(index)
    print(l1)
    
    # 第三种方法 思维置换
    l2 = [11, 22, 33, 44, 55]
    l3 = []
    for index in range(len(l2)):
        if index % 2 == 0:
            l3.append(l2[index])
    l2 = l3
    print(l2)

 

3.元组的补充

  • 元组的补充
    # tuple 元组中如果只有一个元素, 并且没有逗号, 那么它就不是元组, 它与改元素的数据类型一致
    tu1 = (2)
    print(type(tu1))  # int类型
    tu1 = ('太白')
    print(type(tu1))  # str类型
    tu1 = (1, )  # 有逗号的就是元组
    print(type(tu1))
    
    # count 计数
    tu = (1, 2, 3, 3, 3, 2, 2, 3,)
    print(tu.count(2))
    
    # index
    tu = ('太白', '日天', '太白')
    print(tu.index('太白'))  # 如果有重复的元素, 默认是第一个元素

4.字典的补充

  • update (添加值, 改值, 更新)
    # 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)
    # 结果为{'name': '太白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}
    
    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)
  • formkeys
    # formkeys
    dic = dict.fromkeys([1, 2, 'fu'], 100)  # 键指向的都是同一个值
    print(dic)
    
    dic = dict.fromkeys([1, 2, 3], [])
    dic[1].append(88)
    print(dic)  # {1: [88], 2: [88], 3: [88]} 
    # 结果都会变, 因为指向的同一个,改一个,都会变的
  • 字典的删除(不能改变字典的大小)
    dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
    # 将字典中键含有'k'元素的键值对删除。
    for i in list(dic):  
        # 如果直接循环字典的key的话, 会报错,因为改变字典的大小了, 所以转换成list就可以了
        if 'k' in i:
            dic.pop(i)
    print(dic)
  • 非空即True
    # 0,''(),[],{},set(),None  这些都是False
    # 非空及True

5.编码的进阶

  • 编码的介绍(编码就是密码本,就是二进制和文字之间的对应关系)
    • 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 亚洲文字;一个字符三个字节表示。

  • 不同的密码本之间是不能互相识别的
  • 数据在内存中全部是以Unicode编码的, 但当数据进行网络传输和保存到硬盘中,必须是以非Unicode编码 (utf-8, gbk 等等)
  • bytes(主要用来网络传输, 也是一种数据类型)
    • 英文

      • 字符串: 'hello'

        • 内存中的编码方式; Unicode

        • 表现形式: 'hello'

      • bytes

        • 内存中的编码方式: 非Unicode

        • 表现形式: b'hello'

    • 中文

      • 字符串: '中国'

        • 内存中的编码方式: Unicode

        • 表现形式: '中国'

      • bytes:

        • 内存中的编码方式: 非Unicode # utf-8

        • 表现形式: b'\xe4\xb8\xad\xe5\x9b\xbd' utf-8中,一个中文字符占3个字节

  • str --> bytes(相互转换)
    # str --> bytes
    s1 = '中国'
    b1 = s1.encode('utf-8')  # 编码
    print(b1)  # b'\xe4\xb8\xad\xe5\x9b\xbd' 字节类型
    
    b1 = s1.encode('gbk')
    print(b1)  # b'\xd6\xd0\xb9\xfa'
    
    # 解码
    # bytes --> str
    b2 = b1.decode('gbk')
    print(b2)
  • gbk --> utf-8

    # gbk -->utf-8
    b1 = b'\xd6\xd0\xb9\xfa'
    s = b1.decode('gbk')
    print(s)
    b2 = s.encode('utf-8')
    print(b2)

     

posted @ 2022-07-20 16:09  fuju  阅读(34)  评论(0)    收藏  举报