美文网首页
基本类型:字符串

基本类型:字符串

作者: 大象信步走来 | 来源:发表于2020-07-02 22:26 被阅读0次

    基本类型:字符串

    文本的表示

    字符串就是把一个个文字的字符“串 起来”的数据
    • 字符串是容器型数据类型, 将单引号或者双引号作为容器的标志, 元素不需要用逗号隔开: '元素1元素2元素3...'
      字符串是不可变的(不支持增删改);字符串是有序的(支持下标操作)
    • 字符串中的元素: 只能是文本符号(所有计算机能表达出来的符号都可以作为字符串的元素,包含有拉丁字母、数字、标点符号、 特殊符号,以及各种语言文字字符),一个符号对应一个元素
      '内蒙', 'abxy','!@#$%', '↑♦', '123456'
    • 字符串中每一个独立的元素又叫:字符;python中只有字符的概念,但是没有字符对应的数据类型
    表示字符串
    • 用双引号或者单引号都可以表示字符串, 但必须成对
    • 多行字符串用三个连续单引号表示
    # 空串
    str1 = ''
    str2 = ""
    str3 = ''''''
    str4 = """"""
    print(type(str1), type(str2), type(str3), type(str4))
    
    # 非空字符串
    str5 = 'abc'
    str6 = "你好"
    str7 = '''你好,hello'''
    str8 = """123,hi"""
    
    
    
    特殊字符用转义符号“\”表示
    • 字符串中的字符分两种:普通字符、转义字符
    • 普通字符 - 除了转义字符串以外的字符
    • 转义字符 - 在指定符号前加\用来表示一些特殊功能和特殊意义的字符
    转义字符 描述
    (在行尾时) 续行符
    \\ 反斜杠符
    \' 单引号
    \" 双引号
    \a 响铃
    \b 退格(backspace)
    \e 转义
    \000
    \n 换行
    \r 纵向制表符
    \t 横向制表符
    \r 回车
    \f 换页
    \0yy 八进制yy的代表的字符,例如\012代表换行,数值参见ASCII码
    \xyy 十六进制yy的代表的字符,例如\x0a代表换行,数值参见ASCII码
    \uyyyy 十六进制yyyy代表的字符,例如\u4e00代表中文字符‘一’,参见Unicode编码
    \other 其他字符以普通格式输出
    • 计算字符串长度的时候一个转义字符的长度是1.
    • 阻止转义(r语法):在字符串的最前面,加上r/R,字符串中的所有的转义字符都会无效
      • 应用1:windows路径

      • 应用2:正则表达式

    str1 = r'\tyytc\n3123\u4e00'
    print(str1)
    

    字符编码

    • 计算机在存储数据的时候只能存数字,而且存的是数字的补码
    • 为了能够让计算机存储文本数据,给每个字符关联了一个固定的数字,用来对这个字符进行存储。每个字符关联的那个数字就是这个字符的编码值
    编码表
    ASCII表:用一个字节来对字符进行编码(编码范围:0~127)
    • 常见ASCII码的大小规则:0~9 < A~Z < a~z。
      • 数字比字母要小。如 “7”<“F”;
      • 数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ;
      • 字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ;
      • 同个字母的大写字母比小写字母要小32。如“A”<“a” 。
      • 几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48
    Unicode编码表
    • Unicode编码表是对ASCII表的扩展(Unicode编码表中包含了ASCII表中所有的符号)
    • Unicode编码表中包含了世界上所有国家所有民族所有的语言的符号,总共65536个
      中文范围:4e00 ~ 9fa5
    • chr函数:获取指定编码值对应的字符 chr(0x0F00)

      # 打印所有的中文
      count = 0
      for x in range(0x4e00, 0x9fa5):
          print(chr(x), end=' ')
          count += 1
          if count % 40 == 0:
              print()
      print()
      
    • ord函数 :获取指定字符对应的编码值 ord('大')

      print(ord('大'), ord('力'))
      
    • \uxxxx 由十六进制编码值获取对应字符
    str1 = '\u0f00你好!'
    print(str1)
    

    字符串和名字的区别

    字符串是数据本身
    名字是数据的标签
    名字和字符串是“名”和“值”之间 的关系
    • 一个字符串数值可以关联多个名字 一个名字在同一时刻只能关联一个字符串数值
    • 字符串数值只能是字符串类型 名字则可以关联任意类型的数值

    字符串是一种序列

    序列(sequence)
    • 能够按照整数顺序排列的数据
    序列的内部结构:
    • 可以通过从0开始的连续整数来索引单个对象;
    • 可以执行切片,获取序列的一部分;
    • 可以通过len函数来获取序列中包含多少元素;
    • 可以用加法“+”来连接为更长的序列;
    • 可以用乘法“*”来重复多次,成为更长的序列;
    • 可以用“in”来判断某个元素是否在序列中存在。

    字符串操作

    获取字符串中的元素(获取字符)
    1. 下标操作获取单个元素
    2. 切片(slice)操作获取多个元素 s[start​ :end :step]
    3. 遍历
    str1 = 'how are you!'
    
    # 获取单个元素
    
    print(str1[2])
    print(str1[-1])
    
    # 切片
    
    print(str1[1:5])    # 'ow a'
    print(str1[-3::-1])  # 'oy era woh'
    
    # 遍历
    
    for x in str1:
        print(x)
    
    for index in range(len(str1)):
        print(str1[index])
    
    
    字符串相关运算符
    1. “加法”和“乘法”
    • +:将两个字符串进行连接,得到新的字符串。
    • *:将字符串重复若干次,生成新的字符串。
    str1 = 'app'
    str2 = 'le'
    print(str1 + str2)     # apple
    print(str2 * 2)        # lele
    
    1. 判断字符串内容是否相同(==,!=)
    str3 = 'app'
    print(str3 == 'app')     # True
    print(str3 == 'pap')     # False
    
    1. 判断两个个字符串的大小
    • 两个字符串比较大小: 比较的是第一组不相等的字符的编码值的大小
    str3 = 'aXYZ'
    str4 = 'Ax12'
    print(str3 > str4)     # True
    
    • 应用:
    • 判断是否是数字字符: '0' <= char <= '9'
    • 判断是否是小写字母:'a' <= char <= 'z'
    • 判断是否是大写字母:'A' <= char <= 'Z'
    • 判断是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
    • 判断是否是中文字符: '\u4e00' <= char <= '\u9fa5'
    # 练习1:输入一个字符串,统计字符串中字母和中文的个数
    str6 = 'hello, 你好吗?'
    count1 = 0
    count2 = 0
    for x in str6:
        if 'a' <= x <= 'z' or 'A' <= x <= 'Z':
            count1 += 1
        elif '\u4e00' <= x <= '\u9fa5':
            count2 += 1
    print('字母的个数:', count1, '中文的个数:', count2)
    
    # 练习2:判断输入的字符串是否是纯数字字符串
    str7 = '728373'
    for x in str7:
        if not '0' <= x <= '9':
            print('不是纯数字字符串')
            break
    else:
        print('是纯数字字符串')
    
    1. 判断字符串中是否包含某个字符串(in/not in)
    print('yyz' in 'zyy')   # False # 顺序不一致
    print('yyz' in 'yyzab')   # True
    print('a' in 'yyzab')     # True
    
    字符串相关函数
    1. 获取字符串的长度 len函数

    2. max/min/sorted/reversed等,这些函数都适用于字符串

    3. str(数据) - 将自定数据转换成字符串

      • 所有的数据都能转换成字符串
      • 将数据的打印值作为字符串的内容
      a ='absjfh'
      print(sorted(a)) # ['a', 'b', 'f', 'h', 'j', 's']
      print(a)  # absjfh
      
      str1 = r'\tabc'
      print(len(str1))    # 5
      
      num = 100
      str(num)        # '100'
      str([1, 2, 3])   # '[1, 2, 3]'
      

    字符串方法

    1. split:分割
    # 字符串1.split(字符串2)  - 字符串1将字符串2为切割点
    # 字符串1.split(字符串2,N)  - 字符串1将字符串2为切割点,切N次
    # 字符串1.rsplit(字符串2,N)  - 字符串1将字符串2为切割点,从右往左切N次
    
    str1 = 'how are you? --- I am fine. thank you! and you?'
    str2 = str1.split(' ') 
    str3 = str1.split(' ',2)
    str4 = str1.rsplit(' ',2)
    print(str2) # ['how', 'are', 'you?', '---', 'I', 'am', 'fine.', 'thank', 'you!', 'and', 'you?'] 
    print(str3) # ['how', 'are', 'you? --- I am fine. thank you! and you?']
    print(str4) # ['how are you? --- I am fine. thank you!', 'and', 'you?']
    
    1. join:合并
    # 字符串.join(序列) 序列中的字符元素会用字符串连接
    
    list1 = ['ap','p','le']
    new_str1 = ''.join(list1)
    new_str2 = '+'.join(list1)
    print(new_str1) # apple
    print(new_str1) # ap+p+le
    
    list2 = [1,2,3]
    new_str = '+'.join(list2)
    print(new_str) # TypeError: sequence item 0: expected str instance, int found
    
    1. upper/lower/swapcase:大小写相关
    str1 = 'abc'
    print(str1.upper())
    print(str2) # ABC
    
    1. ljust/center/rjust/zfill:排版相关 左中右对齐
    str1 = 'how are you?'
    new_str0 = str1.center(20)
    new_str1 = str1.center(20,"*")
    new_str2 = str1.ljust(20,"*")
    new_str3 = str1.rjust(20,"8")
    new_str4 = str1.zfill(20) # zfill() takes exactly one argument
    new_str5 = str1.rjust(20)
    
    print(new_str0) #     how are you?    
    print(new_str1) # ****how are you?****
    print(new_str2) # how are you?********
    print(new_str3) # ********how are you?
    print(new_str4) # 00000000how are you?
    print(new_str5) #         how are you?
    
    # 练习1: 给任意一个商品的数字编号值,转换成固定格式的商品编码: GDXXXX  -> GD0001, GD0012,....
    num = 2  
    num_str = 'GD'+str(num).zfill(4) # GD0002
    
    1. replace:替换子串
    • 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2全部替换成字符3
    • 字符串1.replace(字符串2, 字符串3, N) - 将字符串1中的前 N 个字符串2替换成字符串3
    str1 = 'how are you? i am fine, Thank you!'
    new_str = str1.replace('o', '*')
    print(new_str)     # h*w are y*u? i am fine, Thank y*u!
    
    new_str = str1.replace('o', '+', 2)
    print(new_str)     # h+w are y+u? i am fine, Thank you!
    
    new_str = str1.replace('you', 'me')
    print(new_str)     # how are me? i am fine, Thank me!
    
    
    1. find: 获取字符串2第一次在字符串1中出现的位置(用正的下标值表示),找不到返回 -1
    str1 = 'How are you? - I am fine. Thank you!'
    print(str1.find('you')) # 8
    
    1. count:统计字符串1出现字符串2的次数
    • 字符串1.count(字符串2)

    • 字符串1.count(字符串2,开始下标,结束下标)

    str1 = 'how are you?'
    print(str1.count('you')) # 1
    print(str1.count('you',0,5)) # 0
    
    1. expandtab:
    • 字符串1.expandtabs() - 将字符串中的制表符替换成8个空格
    • 字符串1.expandtabs(N) - 将字符串中的制表符替换成N个空格
    str2 = '\tabc\t123'
    new_str2 = str2.expandtabs()
    print(str2,len(str2))
    print(new_str2,len(new_str2))
    new_str3 = str2.expandtabs(2)
    new_str4 = str2.expandtabs(3)
    new_str5 = str2.expandtabs(4)
    new_str6 = str2.expandtabs(5)
    new_str7 = str2.expandtabs(6)
    print(new_str3)
    print(new_str4)
    print(new_str5)
    print(new_str6)
    print(new_str7)
    
    1. strip 删除空白(空白包括空格 换行等)
    • str.strip():去掉字符串前后的所有空白,内部的空白不受影响
    • str.lstrip():去掉字符串前部(左部)的所有空白
    • str.rstrip():去掉字符串后部(右部)的所有空白
    • str.strip('*') :掉字符串前后的所有*,内部的空白不受影响
    astr = '    How are you? - I am fine. Thank you!    )
    astr1 = astr.strip()
    astr2 = astr.lstrip()
    astr3 = astr.rstrip()
    print(astr1)
    print(astr2)
    print(astr3)
    
    1. 判断字母数字
    • str.isalpha:判断字符串是否全部由字母构成
    • str.isdigit:判断字符串是否全部由数字构成
    • str.isalnum:判断字符串是否仅包含字母和数字, 而不含特殊字符

    格式化输出

    格式占位符
    • 包含格式占位符的字符串 % (数据1,数据2,数据3)
    • 数据的个数与前面占位符的个数保持一致
    • 格式占位符:
      • %d 给整数站位
      • %Nd / -Nd
      • %f 给小数站位
      • %.Nf 保留N位小数
      • %s 给字符串站位

    字符串中某一个或多个部分不确定就可以用格式字符串来实现功能

    name = input('姓名:')
    age = int(input('年龄:'))
    salary = float(input('年薪:'))
    message = '%s今年%d岁。年薪:%f元' % (name,age,salary)
    message1 = '%s今年%5d岁。' % (name,age)
    message2 = '%s今年%-5d岁。' % (name,age)
    
    format
    字符

    在字符串中通过{}来占位表示字符串中变化的部分

    • {}的个数和数据项数量保持一致
    • 列表形式的format:下标
    • key形式的format:{key}
    • key形式format的变形
    name = input('姓名:')
    age = int(input('年龄:'))
    
    # {}的个数和数据项数量保持一致
    message = '{}今年{}岁。'.format(name,age)
    print(message)
    #列表形式的format
    message1 = '你好,我是{0}。你多大了?--嗨,{0}你好,我{1}'.format(name,age)
    print(message1)
    # key形式的format:{key}
    message2 = '我叫{name},今年{age}。'.format(name= 'ALLEN',age=18)
    print(message2)
    # key形式format的变形
    message3 = f'那个{name},已经{age}了。'
    print(message3)
    
    数字格式化
    • :.Nf - 显示小数点位数(N)
    • :.x>Nd - 数字补x (填充右边, 宽度为4)
    • :.x<Nd
    • :, -
    • :.N% - 以百分比的形式显示数据,保留N位小数
    print('数字:{:.2f}'.format(1.23785648))
    print('数字:{:x>5d}'.format(32))
    print('数字:{:0<5d}'.format(32))
    num = 1000000
    print('数字:{:,}'.format(num))
    num = 0.45
    print(f'{num:.2%}')
    

    相关文章

      网友评论

          本文标题:基本类型:字符串

          本文链接:https://www.haomeiwen.com/subject/bivdqktx.html