字符串总结,9.29

字符串

  1. 字符

    1.什么是字符串(str)

    容器型数据类型; 将’‘、“”、’‘’‘’'、“”“”""作为容器的标志里面的每个符号就是字符串中元素。

    不可变的(不支持增删改);有序的(支持下标操作)

    元素(字符):可以是任何文字符号, 包括:数字、字母、汉字、日文、韩语、表情符号、标点等
    任何文字符号都可以是字符串的元素

    转义字符
    转义字符: \和指定的一些符号组合在一起表示特殊功能或者特殊意义的字符。
    转义字符是C语言创建的,但是很多都已经没有存在的价值的,目前常用的转义字符:
    \n      -       换行
    \t      -       水平制表符(相当于按一次tab键)
    \'      -       表示一个普通的单引号
    \"      -       表示一个普通的双引号
    \\      -       表示一个普通的反斜杠
    
    注意:在字符串的最前面加r或者R,可以让字符串中所有的转义字符功能消失(让字符串中的所有字符自动变成普通字符
  2. 字符编码

    1.编码值:

    计算机存储数据的时候只能存数字(存的是数字对应的二进制的补码);
    为了能够让计算机存储字符,给每个字符对应一个固定的数字,每次需要存储这个字符的时候就去存这个数字;
    每个字符对应的那个数字就是这个字符的编码值。

    2.编码表

    1)ASCII码表 - 有128个字符对应的编码值(只有包含英文符号和其他西欧语言对应的符号)

    数字字符0~9从48开始连续递增
    大写字母A~Z从65开始连续递增
    小写字母a~z从97开始连续递增

    2)Unicode编码表(Python) - 是ASCII码表的扩展(包含了ASCII码表),包含了世界上所有国家所有民族所有语言的对应的符号(统一码、万国码)

    中文范围:4e00 ~ 9fa5 十六进制的 在打印时要加上0x

    chr(编码值) - 获取指定编码值对应的字符
    print(chr(97), chr(65))    #a A
    
    ord(字符) - 获取指定字符对应的编码
    print(ord('屈'),ord('圣'),ord('杭'))       #23624 22307 26477
    
  3. 字符串基本操作

    字符串获取字符的语法和列表获取元素的语法一样。

    str1 = 'good good study! day day up!'
    print(str1[3], str1[-2])         #d p
    
    注意:不管转义字符的功能是什么,在计算字符串长度的时候一个转义字符的长度是1
    str2 = '\tabc\n123\u4e00m'
    print(str2[1], str2[-3])           #a 3
    

    切片

    message = '小明的电话号码是:13678192303'
    print(message[-11:])            # '13678192303'
    print(message[3:-2:-2])         # ''
    print(message[1:-1:2])          # '明电号是16893'
    

    遍历

    str3 = 'hello python!'
    for x in str3:
        print(x)
    

    字符串数学运算 +、*

    2. 数学运算:+*
    # 1) 字符串1 + 字符串2       -       将两个字符串合并产生一个新的字符串(字符串拼接)
    str1 = 'hello'
    str2 = 'world!'
    str3 = str1 + ' ' + str2
    print(str3)
    
    # 2) 字符串 * N        -       将字符串重复N次产生一个新的字符串
    str4 = str1 * 3
    print(str4)
    
     案例:提取字符串中所有数字字符
    # 'abc12MK89你好9'   ->  '12899'
    str1 = 'abc12MK89你好9'
    new_str = ''
    for x in str1:
        if '0' <= x <= '9':
            new_str += x
    print(new_str)      # '12899'
    
    # ''+'1' -> '1' + '2' ->'12' + '8'  -> '128' ...
    
    # 案例:在字符串中两个字符之前插入*
    # 'abc12'  ->  'a*b*c*1*2'
    str1 = 'abc12'
    new_str = ''
    for x in str1:
        new_str += x + '*'
    
    print(new_str[0:-1])
    
    # 练习:将字符串中所有的数字字符都替换成*
    # 'ab2Mk89你好8'  ->  'ab*Mk**你好*'
    str1 = 'ab2Mk89你好8'
    new_str = ''
    for x in str1:
        if '0' <= x <= '9':
            new_str += '*'
        else:
            new_str += x
    print(new_str)      # 'ab*Mk**你好*'
    

    比较运算

    判断相等:两个一模一样的字符串才相等

    print('abc' == 'acb')       # False
    

    比较大小: 两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小

    判断x是否是数字字符: ‘0’ <= x <= ‘9’
    判断x是否是小写字母: ‘a’ <= x <= ‘z’
    判断x是否是大写字母: ‘A’ <= x <= ‘Z’
    判断x是否是字母: ‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’ 小写字母和大写之间还有其他符号
    判断x是否是中文: ‘\u4e00’ <= x <= ‘\u9fa5’

    练习:分别统计字符串中中文和大写字母的数量
    str1 = 'shfa换手机223--=2MjshUj行HSJSA'
    count1 = count2 = 0
    for x in str1:
        if '\u4e00' <= x <= '\u9fa5':
            count1 += 1
        elif 'A' <= x <= 'Z':
            count2 += 1
    print(count1, count2)
    

    字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)

    print(10 in [10, 20, 30])           # True
    print([10, 20] in [10, 20, 30])     # False
    
    print('a' in 'abc123')          # True
    print('abc' in 'abc123')        # True
    print('ab1' in 'abc123')        # False
    
    str(数据) - 将指定数据转换成字符串

    所有类型的数据都可以转换成字符串,转换的时候是在数据的打印值外面加引号

  4. 字符串相关方法

    1字符串.join(序列) - 用指定字符串将序列中元素拼接成一个字符串(序列中的元素必须是字符串)

    result = '+'.join(['name', 'age', 'gender'])
    print(result)       # name+age+gender
    
    result = '=='.join('abc')
    print(result)       # a==b==c
    
    nums = [10, 20, 30, 40]
    # '10+20+30+40'
    result = '+'.join([str(x) for x in nums])
    print(result)       # '10+20+30+40'
    
    
    list1 = [10, 'abc', '你好', 1.23, True, '手机壳']
    # 'abc你好手机壳'
    result = ''.join([x for x in list1 if type(x) == str])
    print(result)       # 'abc你好手机壳'
    
    练习:将列表中每个元素的第一个字符提取出来形成一个新的字符串:
    # ['name', 'age', 'gender']  -> 'nag'
    list1 = ['name', 'age', 'gender']
    result = ''.join([x[0] for x in list1])
    print(result)
    

    2

    字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割
    字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割

    用字符串1中等于字符串2的元素去切字符串1

    str1 = '123abc你好abc===abc+++'
    result = str1.split('abc')
    print(result)       # ['123', '你好', '===', '+++']
    
    result = str1.split('a')
    print(result)       # ['123', 'bc你好', 'bc===', 'bc+++']
    
    result = str1.split('abc', 2)
    print(result)       # ['123', '你好', '===abc+++']
    
    注意:如果切割点连续出现或者切割点在字符串的开头或者结果,切割的结果中会出现空串
    str1 = 'abc123abcabc你好abc===abc+++abc'
    result = str1.split('abc')
    print(result)       # ['', '123', '', '你好', '===', '+++', '']
    

    3

    # 字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3
    # 字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3

    message = 'how are you? i am fine! thank you! and you?'
    result = message.replace('you', 'me')
    print(result)       # how are me? i am fine! thank me! and me?
    
    result = message.replace('you', 'me', 1)
    print(result)       # how are me? i am fine! thank you! and you?
    
    # 案例:删除字符串message中所有的空格符号
    result = message.replace(' ', '')
    print(result)       # howareyou?iamfine!thankyou!andyou?
    

    4

    # 字符串.strip() - 删除字符串前后两端的空白字符 把字符前后的空白删掉
    # 字符串.strip(字符集) - 删除字符串前后两端的指定所有字符 把字符前后的指定字符删掉

    5

    # 字符串1.find(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存在返回-1

    获取的时字符串1的下标(字符串2出现在1中的下标 第一次,如果1中没有2 返回-1)

    # 字符串1.index(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存报错

    message = 'how are you? i am fine! thank you! and you?'
    print(message.find('you'), message.index('you'))
    
    print(message.find('abc'))      # -1
    # print(message.index('abc'))   # 报错
    

    在指定下标范围内找

    # 字符串1.find(字符串2, 开始下标, 结束下标)       -       在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到返回-1
    # 字符串1.index(字符串2, 开始下标, 结束下标)       -       在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到报错
    message = 'how are you? i am fine! thank you! and you?'
    print(message.find('you', 0, 8))        # -1
    print(message.find('you', 11))          # 30
    

    find 前面加r 就从后往前找

    # 字符串1.rfind(字符串2)       -       (从后往前找)
    # 字符串1.rindex(字符串2)       -       (从后往前找)
    message = 'how are you? i am fine! thank you! and you?'
    print(message.rfind('you'))     # 39
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值