Python的学习(十):字符串

Python的学习(十):字符串

在Python中字符串是基本数据类型,是一个不可变的字符序列

字符串的驻留机制

  • 仅保存一份相同且不变字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把字符串的地址赋值

    • 给新创建的变量。

    image-20220203220043050

  • 驻留机制的几种情况(交互模式)

    1. 字符串的长度为0或为1时
    2. 符合标识符的字符串
    3. 字符串只在编译时进行驻留,不是在运行时
    4. [-5,256]之间的整数数字
  • sys中的intern方法强制2个字符串指向同一个对象

  • PyCharm对字符串进行了优化处理

优缺点?

  • 需要值相同的字符串时,可以直接从字符串池中拿来使用,避免频繁的创建与销毁,提升效率和节约内存,因此拼接字符串和修改字符会比较影响性能。
  • 在需要进行字符串拼接时建议使用str类型的join方法,不是+,因为join先计算出所有字符的长度,然后拷贝,只要new对象一次,效率更高。

字符串的常用操作

字符串的查询

  • index()

    查找子串第一次出现的位置,如果不存在,则抛出ValueError异常

  • rindex()

    查找子串最后一次出现的位置,如果不存在,则抛出ValueError异常

  • find()

    查找子串第一次出现的位置,如果不存在,则返回-1

  • rfind()

    查找子串最后一次出现的位置,如果不存在,则返回-1

字符串的大小写转换

转换之后会产生一个新的字符串对象!!!

  • upper()

    把字符串中所有字符都转成大写字母

  • lower()

    把字符串中所有字符都转成小写字母

  • swapcase()

    把字符串中所有大写字母转成小写,把所有小写字母转成大写

  • capitalize()

    把第一个字符转换称大写,把其余字符转换成小写

  • title()

    把每个单词的第一个字符转换成大写,把每个单词的剩余字符转换成小写

字符串内容对齐

填充符不写,默认是空格!

例子:s = ‘hello,Python’

  • center()

    居中对齐,第一个参数指定宽度,第二个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符。

    print(s.center(20,'*'))
    #****hello,Python****
    
  • ljust()

    左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格如果设置宽度小于实际宽度则返回原字符。

    print(s.ljust(20,'*'))
    #hello,Python********
    
  • rjust()

    右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格如果设置宽度小于实际宽度则返回原字符。

    print(s.rjust(20,'*'))
    #********hello,Python
    
  • zfill()

    右对齐,左边用0来填充,该方法只接收一个参数,用于指定字符的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身。

    print(s.zfill(20))
    #00000000hello,Python
    

字符串劈分

  • split()

    从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表

    s = 'hello world Python'
    lst = s.split()
    print(lst)
    #['hello','world','Python']
    

    以通过参数sep指定劈分字符串的劈分符

    s1 = 'hello|world|Python'
    print(s1.split(sep = '|'))
    #['hello','world','python']
    

    通过参数maxsplit指定劈分字符串的最大次数,在经历最大次劈分之后,剩余的字串会单独作为一部分。

    print(s1.split(sep = '|',maxsplit = 1))
    #['hello','world|Python']
    
  • rsplit()

    1. 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表

    2. 以通过参数sep指定劈分字符串的劈分符

    3. 通过参数maxsplit指定劈分字符串的最大次数,在经历最大次劈分之后,剩余的字串会单独作为一部分。

字符串操作方法

  • isidentifier()

    判断指定的字符串是不是合法的标识符

  • isspace()

    判断指定字符串是否全部由空白字符串组成(回车、换行、水平制表)

  • isalpha()

    判断字符串是否全部由字母组成

  • isdecimal()

    判断指定字符串是否全部由十进制的数字组成

  • ismumeric()

    判断指定的字符串是否全部由数字组成

    支持中文数字、阿拉伯数字、罗马数字!

  • isalnum()

    判断字符串是否全部由字母和数字组成

字符串的替换与合并

  • replace()

    第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不会发生变化,调用该方法可以通过第三个参数指定最大替换次数。

    s = 'hello,python'
    print(s.replace('Python','java'))
    #hello.java
    s1 = 'hello,python,python,python'
    print(s.replace('Python','java',2))
    #hello.java,java,python
    
  • join()

    将列表或者元组中的字符串合并成一个字符串

    lst = ['hello','java','python']
    print('|'.join(lst))
    print(''.join(lst))
    #hello|java|python
    #hellojavapython
    

字符串的比较

  • 运算符号:>,>=,<,<=,==,!=

  • 比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较。

  • **比较原理:**两串字符进行比较时,比较的是其Ordinal value(原始值),调用内置函数ord可以得到指定字符的原始值,与内置函数ord对应的是内置函数chr,调用chr时指定的Ordinal value可以得到与其对应的字符。

    print(ord('a').ord('b'))
    #97 98
    print(ord(97).ord(98))
    #a b
    

注意:==与is的区别

  1. ==比较的是value
  2. is 比较的时id是否相等

字符串的切片

切片会产生新的字符串对象!!!

s = 'hello,Python'
s1 = s[:5]#hello 由于没有指定起始位置,所以从0开始切到索引5
s2 = s[6:]#Python 由于没有指定结束位置,所以切索引6直到最后一个元素
  • 标准写法:

    [star:end:step]

    #从1开始截到5,不包含5,步长为1
    print(s[1:5:1])#ello
    #默认从0开始到最后一个元素,步长为2
    print(s[::2])#hlopto
    #默认从最后一个元素到第一个元素1,步长为1
    print(s[::-1])#nohtyp,olleh
    

格式化字符串

  • 占位两种方式:
  1. %作占位符

    image-20220204001313041

    name = '傻逼'
    age = 18
    print('我叫%s,今年%d岁' %(name,age))
    
  2. {}作占位符号

    image-20220204001339529

    #0为第一个参数,1为第一个参数
    print('我叫{0},今年{1}岁'.format(name,age))
    
  3. f-string

    print('我叫{name},今年{age}岁')
    

用%表示:

  • 宽度

    print('%10d' % 99)#10表示宽度
    
  • 小数点后几位

    print('%.3f' % 3.1415926)#.3表示小数点后三位
    print('%10.3f' % 3.1415926)#10.3同时表示宽度和精度
    

用{}表示:

print('{0:.3}'.format(3.1415926))#.3表示的是一共三位数
print('{0:.3f}'.format(3.1415926))#.3f表示的是一共三位小数
print('{:10.3f}'.format(3.1415926))#同时设置宽度和精度,宽度是10,3位是小数

字符串的编码和解码

image-20220204003028919

  • 编码与解码的方式

    编码:将字符串转化成二进制数据(bytes)

    image-20220204003317616

    解码:将bytes类型的数据转换成字符串类型

    解码的格式要和编码的格式相同

    image-20220204003523782

总结

image-20220204003600695

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值