• 【Python】字符串详解


    目录

    1、字符串的驻留机制

    驻留机制的优缺点

    2、字符串的常用操作

    2.1 查询

     2.2 大小写转换

    2.3 字符串对齐

     2.4 字符串劈分

     2.5 判断字符串

    2.6 替换和合并 

    3、字符串的比较

    4、字符串的切片操作

    5、格式化字符串

    6、字符串的编码转换


    字符串

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

    1、字符串的驻留机制

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

    1. a = 'Python'
    2. b = "Python"
    3. c = '''Python'''
    4. print(id(a))
    5. print(id(b))
    6. print(id(c))
    7. #三者的值相同

    驻留机制的优缺点

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

    2、字符串的常用操作

    2.1 查询

    • index():查找子串substr第一次出现的位置,若不存在,则抛出ValueError
    • rindex():查找子串substr最后一次出现的位置,若不存在,则抛出ValueError
    • find():查找子串substr第一次出现的位置,若不存在,则返回-1
    • rfind():查找子串substr最后一次出现的位置,若不存在,则返回-1
    1. s='hello,hello'
    2. print(s.index('lo')) #3
    3. print(s.find('lo')) #3
    4. print(s.rindex('lo')) #9
    5. print(s.rfind('lo')) #9

     2.2 大小写转换

    • upper():把字符串中所有字符转换成大写字母
    • lower():把字符串中所有字符转换成小写字母
    • swapcase():把字符串中所有大写字符转换成小写字母,把所有小写字符转换成大写字母
    • capitalize():把第一个字符转换成大写,其余字符转换成小写
    • title():把每个单词的第一个字符转换成大写,其余字符转换成小写

    2.3 字符串对齐

    •  center():居中对齐,第1个参数指定宽度,第2个参数指定填充符(可选,默认为空格),如果设置宽度小于实际宽度则返回原字符串
    • ljust():左对齐,第1个参数指定宽度,第2个参数指定填充符(可选,默认为空格),如果设置宽度小于实际宽度则返回原字符串
    • rjust():右对齐,第1个参数指定宽度,第2个参数指定填充符(可选,默认为空格),如果设置宽度小于实际宽度则返回原字符串
    • zfill():右对齐,左边用0填充,只接收一个参数用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回原字符串
    1. s='hello,python'
    2. print(s.center(20,'*')) # ****hello,python****
    3. print(s.ljust(20,'*')) # hello,python********
    4. print(s.rjust(20,'*')) # ********hello,python
    5. print(s.zfill(20)) # 00000000hello,python
    6. print(s.zfill(10)) # hello,python
    7. m='-2736'
    8. print(m.zfill(8)) # -0002736

     2.4 字符串劈分

    • split():从字符串左边开始劈分,默认的劈分字符(通过sep参数指定)是空格字符串,返回的值都是一个列表,参数maxsplit指定最大劈分次数
    • rsplit():从字符串右边开始劈分
    1. s='hello world python'
    2. lst=s.split()
    3. print(lst) #['hello','world','python']
    4. s1='hello|world|python'
    5. print(s1.split(sep='|')) #['hello','world','python']
    6. print(s1.split(sep='|',maxsplit=1)) #['hello','world|python']
    7. print(s.rsplit())#['hello','world','python']
    8. print(s1.rsplit(sep='|')) #['hello','world','python']
    9. print(s1.rsplit(sep='|',maxsplit=1)) #['hello|world','python']

     2.5 判断字符串

    • isidentifier():判断指定的字符串是不是合法的标识符
    • isspace():判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
    • isalpha():判断指定的字符串是否全部由字母组成
    • isdecimal():判断指定的字符串是否全部由十进制的数字组成
    • isnumeric():判断指定的字符串是否全部由数字组成
    • isalnum():判断指定的字符串是否全部由字母和数字组成
    1. s='hello,python'
    2. print(s.isidentifier()) #False
    3. print('\t'.isspace()) #True
    4. print('abc'.isalpha()) #True
    5. print('张三'.isalpha()) #True
    6. print('123四'.isdecimal()) #False
    7. print('123'.isnumeric()) #True
    8. print('123四'.isnumeric()) #True
    9. print('abc1'.isalnum()) #True

    2.6 替换和合并 

    • replace():用第2个参数替换第1个参数指定的字符串
    • join():将列表或元组中的字符串合并成一个字符串
    1. s='hello,python'
    2. print(s.replace('python','java'))# hello,java
    3. lst=['hello','java','python']
    4. print('|'.join(lst)) # hello|java|python
    5. print(''.join(lst)) # hellojavapython
    6. t=('hello','java','python')
    7. print(''.join(t)) # hellojavapython
    8. print('*'.join('python')) # p*y*t*h*o*n

    3、字符串的比较

    运算符:>,>=,<,<=,==,!= (一个字符一个字符进行比较,直至不同)

    1. print('apple'>'app') # True
    2. print('apple'>'banana') # False 比较的是a和b的ord值(a为97,b为98)

    ==和is的区别

    ==比较的是value

    is比较的是两者的id

    4、字符串的切片操作

    切片将产生新的对象

     切片左闭右开

    1. s='hello,python'
    2. s1=s[:5]
    3. print(s1) #hello
    4. s2=s[6:]
    5. print(s2) #python
    6. s3='!'
    7. newstr=s1+s3+s2
    8. print(newstr) #hello!python
    9. #s1,s2,s3,newstr的id都不相同

    切片[start:end:step] 

    1. s='hello,python'
    2. print(s[1:5:1]) #ello
    3. print(s[::2]) #hlopto
    4. print(s[::-1]) #nohtyp,olleh
    5. print(s[-6::1]) #python

    5、格式化字符串

    格式化字符串的两种方式

    (1)%作占位符

    %s:字符串

    %d:整数

    %f:浮点数

    例:'我的名字叫:%s,今年%d岁了' % (name,age)

    1. name='张三'
    2. age=20
    3. print('我叫%s,今年%d岁' % (name,age)) #我叫张三,今年20岁

    (2){}作占位符

    例:'我的名字叫:{0},今年{1}岁了' .format(name,age)

    1. name='张三'
    2. age=20
    3. print('我叫{0},今年{1}岁'.format(name,age)) #我叫张三,今年20岁
    4. print(f'我叫{name},今年{age}岁') #我叫张三,今年20岁
    5. print('{0:.3}'.format(3.1415926)) #3.14(0是占位符,3代表一共3位数)
    6. print('{:.3f}'.format(3.1415926)) #3.142

    宽度和精度

    1. print('%10d' % 99) # 99(10表示宽度)
    2. print('%.3f' % 3.1415926) #3.142(3表示小数点后三位)
    3. print('%10.3f' % 3.1415926) # 3.142

    6、字符串的编码转换

    为什么要进行编码转换

    编码:将字符串转换为二进制(bytes)

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

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

    1. s='天涯共此时'
    2. #编码
    3. print(s.encode(encoding='GBK')) # b'\xcc\xec\xd1\xc4\xb9\xb2\xb4\xcb\xca\xb1'
    4. print(s.encode(encoding='UTF-8')) #b'\xe5\xa4\xa9\xe6\xb6\xaf\xe5\x85\xb1\xe6\xad\xa4\xe6\x97\xb6'
    5. #解码
    6. byte=s.encode(encoding='GBK')
    7. print(byte.decode(encoding='GBK')) #天涯共此时
    8. byte=s.encode(encoding='UTF-8')
    9. print(byte.decode(encoding='UTF-8')) #天涯共此时

     

  • 相关阅读:
    微信小程序(中)
    基于机器学习的自动音乐生成播放器
    VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)
    新手学PCB画板选什么软件
    系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
    what?测试/开发程序员要被淘汰了?年龄40被砍到了32?一瞬间,有点缓不过神来......
    新冠病毒分型和突变分析(SARS-CoV2_ARTIC_Nanopore)
    426. 将二叉搜索树转化为排序的双向链表
    Java常见跳出循环的4种方式总结、switch中的break与return、lamada表达式中foreach如何正确选择退出方式
    借助实例,轻松掌握 Makefile
  • 原文地址:https://blog.csdn.net/m0_51683653/article/details/127717740