基础数据类型补充

str补充方法

  • a = str

  1. 格式化方法

    • a.capitalize() 【首字母改成大写】

    • a.casefold()【都改成小写】

    • a.lower() 【全变小写】

    • a.swapcase() 【大小写互换】

    • a.upper() 【改大写】

    • a.center(填充长度,‘填充的符号’) 【两边填充】

    • a.ljust() 【左边填充】

    • a.rjust() 【右边填充】

    • a.zfill() 【字符串空的地方填0】

    • a.strip() 【两边去死皮】

    • a.lstrip() 【左边去死皮】

    • a.rstrip() 【右边去死皮】

    • a.format() 【引用外部变量】

      a = 'my name is {name}, i am {age} years old.'
      a.format(name='JacKMa',age=56)
      'my name is JacKMa, i am 56 years old.'

       

       

  2. 判断方法

    • a.startswith(‘判断开头字符’) 【判断开头真假】

    • a.endswith(‘判断结尾字符’) 【判断结尾真假】

    • a.isalnum() 【是不是字母or数字】

    • a.isalpha() 【是不是字母】

    • a.isdigit() 【是不是数字,只能是阿拉伯数字】

    • a.isnumeric() 【是不是数字,只要是数字形式就为真,列如:二十】

    • a.isidentifier() 【是不是py关键字】

    • a.isprintable() 【是否可打印】

    • a.isspace() 【是不是空格】

    • a.isupper() 【是不是都是大写】

  3. 查、改、计数、替换

    • a.find('查的字符',开始位置,结束位置) 【查找从左到右第一个所查字符的位置】

    • a.rfind('查的字符',开始位置,结束位置) 【查找从右到左第一个所查字符的位置】

    • a.index() 【和find一样,但是找不到会报错,find找不到不会报错,返回-1】

    • a.count(‘寻找的值’,开始位置,结束位置) 【计数寻找的值有多少个】

    • a.split(‘按什么分割’,maxsplit=切几次,默认全切) 【默认按空格分割字符串,返回的是字典】

    • a.rsplit() 【从右边切】

    • a.splitlines() 【按换行符/n切割】

    • a.removeprefix(’要去掉的字符‘) 【去掉前缀某些字符】

    • a.removesuffix(’要去掉的字符‘) 【去掉后缀某些字符】

    • a.replace(’被替换的‘,‘想替换的’,替换多少次默认全部) 【替换,不是更改】

  4. 特殊变态方法

    • ‘连接符自定义’.join(需要拼接的列表) 【把列表转成字符串,每个元素拼接起来,按指定格式】

    • 需要加密的字符.maketrans(‘数据源’,’输出的加密文‘) 【生成密码本,数据源和输入显示的加密文必须一一对应都为str】

    • 需要加密的文字.translate(‘密码本’) 【加密】

       

tuple 补充方法

  • 元组中如果只有一个元素并且没有逗号,那么它不是元组,它与改元素的数据类型一致。

    tup = ([1, 2, 3])
    print(type(tup))
    tup = ('str')
    print(type(tup))
    tup = ('str',)    # 加了逗号
    print(type(tup))
    #输出
    <class 'list'>
    <class 'str'>
    <class 'tuple'>        # 类型就变为元组
  • count():计数,获取某元素在列表中出现的次数
  • index():通过元素找索引

list补充方法

  • 列表可以相加

    l1 = [1, 2, 3]
    l2 = ['a', 'b', 'c']
    print(l1 + l2)
    #输出
    [1, 2, 3, 'a', 'b', 'c']
  • 列表可以与数字相乘
    l1 = [1, 'abc', 3]
    print(l1*3)
    # 输出
    [1, 'abc', 3, 1, 'abc', 3, 1, 'abc', 3]

     

  • 相关题:
    • l1 = [11, 22, 33, 44, 55]
      索引为奇数对应的元素删除。[11, 33, 55]
      • 正常思路:
        先将所有的索引整出来。
        加以判断,index % 2 != 0 :pop(index)
        for index in range(len(l1)):
            if index % 2 != 0:
                l1.pop(index)
                print(index)
        print(l1)
        # 输出:
        [11, 33, 44]    # 因为列表删除一个后面的会把前面的补齐,所以索引就变了。
      • 最简单的
        del l1[1::2]    # 以切片步长来删除
        print(l1)
        # 输出:
        [11, 33, 55]
      • 倒叙法删除
        for index in range(len(l1)-1, -1, -1):   # 从后面删除就不会影响不到前面的索引
            if index % 2 != 0:
                l1.pop(index)
        print(l1)
        # 输出
        [11, 33, 55]
      • 思维置换: 取出所有的偶数位的值
        new_l1 = []
        for index in range(len(l1)):
            if index % 2 == 0:
                new_l1.append(l1[index])
        l1 = new_l1
        print(l1)
        # 输出
        [11, 33, 55]
    • 循环一个列表时,最好不要改变列表的大小,这样会影响你最终的结果。

dict:补充方法

  • update() 增加键值对,同时增加几个,有则增加无则修改,元组拆包

    • 同时增加几个键值对。

      dic = {'name': '小杨', 'age': 18}
      dic.update(hobby='运动',hight='170')
      print(dic)
      # 输出
      {'name': '小杨', 'age': 18, 'hobby': '运动', 'hight': '170'}
    • 有则增加,无则修改(更新)
      dic = {'name': '小杨', 'age': 18}
      dic.update(name='小红', hight='170')
      print(dic)
      # 输出
      {'name': '小红', 'age': 18, 'hight': '170'}
      
      
      dic = {'name': '小杨', 'age': 18}
      dic2 = {'name': '小明', 'sex': ''}
      dic.update(dic2)
      print(dic)
      # 输出
      {'name': '小明', 'age': 18, 'sex': ''}
    • 元组拆包
      dic = {'name': '小杨', 'age': 18}
      tup = [(1, 'a'), (2, 'b'), (3, 'c')]
      dic.update(tup)
      print(dic)
      # 输出
      {'name': '小杨', 'age': 18, 1: 'a', 2: 'b', 3: 'c'}fromkeys:字典的键来自一个可迭代对象,值共用一个
    • fromkeys:字典的键来自一个可迭代对象,值共用一个
      dic = dict.fromkeys('abcd', 100)
      print(dic)
      # 输出
      {'a': 100, 'b': 100, 'c': 100, 'd': 100}
    • fromkeys的坑!值共用一个。
      dic = dict.fromkeys(['a', 'b', 'c', 'd'], [])
      print(dic)
      dic['a'].append(666)   # 给键 a 的值添加 666 其他的也会跟着添加
      print(dic)
      # 输出
      {'a': [], 'b': [], 'c': [], 'd': []}
      {'a': [666], 'b': [666], 'c': [666], 'd': [666]}
  • 相关题:
    dic = {'k1': '小杨', 'k2': 'barry', 'k3': '拜拜', 'age': 18}
    将字典中key含有k元素的键值对删除
    注意:循环一个字典时,如果改变这个这个字典的大小就会报错。
    for key in dic:
        if 'k' in key:
            dic.pop(key)
    print(dic)
    # 输出报错
    RuntimeError: dictionary changed size during iteration

    但是可以把key中含有k元素的键单独拿出来在循环删除

    dic = {'k1': '小杨', 'k2': 'barry', 'k3': '拜拜', 'age': 18}
    # 将字典中key含有k元素的键值对删除
    key = []
    for i in dic.keys():
        if 'k' in i:
            key.append(i)
    for n in key:
        dic.pop(n)
    print(dic)
    # 输出
    {'age': 18}

    或者:

    for key in list(dic.keys()): #不加list是动态在字典中获取,还是和字典有交互会报错,加list强转列表
        if 'k' in key:
            dic.pop(key)
    print(dic)
    # 输出
    {'age': 18}

     

编码的进阶

  • 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等等)。

英文:

str: 'hello '

  内存中的编码方式: Unicode

  表现形式: 'hello'

bytes :

  内存中的编码方式: 非Unicode

  表现形式:b'hello'

中文:

  str: '中国'

  内存中的编码方式: Unicode

  表现形式:'中国'

bytes :

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

  表现形式:b'xe4xb8xadxe5x9bxbd'

 

  • bytes类型可以直接在网络上传输或者储存到硬盘中

    # str ---> bytes  (Unicode---->非Unicode)
    s1 = '中国'
    b1 = s1.encode('utf-8')   # 编码成utf-8的中国-->’xe4xb8xadxe5x9bxbd‘,也可以是其他编码
    print(b1, type(b1))
    # 输出:
    b'xe4xb8xadxe5x9bxbd' <class 'bytes'> 
    
    # bytes ---> str
    b1 = b'xe4xb8xadxe5x9bxbd'
    s2 = b1.decode('utf-8')      # 解码,用什么进行编码的就用什么进行解码
    print(s2)
    # 输出:
    中国
  • str(Unicode编码) 数据类型和 bytes(非Unicode编码) 数据类型的相互转换
    • str--->bytes
      s1 = '中国'
      # 将Unicode编码的‘中国’转换成utf-8编码
      b1 = s1.encode('utf-8')   # encode编码,编码后类型为bytes
      print(b1)
      # 输出
      b'xe4xb8xadxe5x9bxbd' <class 'bytes'>
    • bytes--->str
      s1 = '中国'
      # 将Unicode编码的‘中国’转换成utf-8编码
      b1 = s1.encode('utf-8')   # encode编码,编码后类型为bytes
      s2 = b1.decode('utf-8')   # decode解码,解码后类型为str
      print(s2, type(s2))
  • bytes(gbk编码)和 bytes(utf-8编码的转换)
    将gbk编码转换成utf-8编码流程
    gbk--->Unicode--->utf-8
    反之亦然
    
    gbk = b'xd6xd0xb9xfa'     # gbk编码的中国,类型为bytes
    str1 = gbk.decode('gbk')      # 先解码转换成Unicode,类型为str
    utf_8 = str1.encode('utf-8')  # 在编码成utf-8,类型为bytes
    print(utf_8)
    # 输出
    b'xe4xb8xadxe5x9bxbd'
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/XiaoYang-sir/p/14643101.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!