![Python编程基础与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/854/41309854/b_41309854.jpg)
2.4.2 字符串的基本操作与方法
1.获取多个字符
使用[ ]除了可以获取单个字符外,还可以指定一个范围来获取多个字符,也就是一个子串或者片段,具体格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_01.jpg?sign=1739358674-9ZsPRaa1H7GgltUB3g5f7JlX9Ht3W2tI-0-c65b8ff8c2a1b6aa12c14fbe7f99fc5a)
式中,strname是要截取的字符串;start表示要截取的第一个字符所在的索引(截取时包含该字符),如果不指定,默认为0,也就是从字符串的开头截取;end表示要截取的最后一个字符所在的索引(截取时不包含该字符),如果不指定,默认为字符串的长度;step指的是从start索引处的字符开始,每step个距离获取一个字符,直至end索引处的字符,step默认值为1,当省略该值时,最后一个冒号也可以省略。
【例2-35】 字符串的访问。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_02.jpg?sign=1739358674-OZFYAk4X9fPBNqD3Ng32w0G8FegJt7uk-0-8debc31085df1a4fbd49483fd05a6033)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_03.jpg?sign=1739358674-4lzqRnsafK3JYnB7BgiuETSAqASeWm7z-0-85468fed0a95241df02e86358cde18e2)
2.获取字符串长度或字节数
字符串的长度一般用len函数,其基本语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_04.jpg?sign=1739358674-tjTqthw1Y2Q2qK5pc89OtBYEOO3uGS3T-0-915e42df216bc3cf89a6d46ff130bc18)
式中,string用于指定要进行长度统计的字符串。
字符串长度不等于字节数,后者需要使用encode()方法将字符串进行编码后再获取它的字节数。
【例2-36】 字符串的长度与字节数。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_01.jpg?sign=1739358674-yj08GcNQ3w1A6KdYnLdCkFqKOXFHTKK7-0-e4e2c800fdc6a839b949775d48c1b63d)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_02.jpg?sign=1739358674-2eJX75suK4CPCh8wee1e03Rzd2II4aLU-0-a47e60349d3f848ae7e8e6d55e6eabe2)
从例中可以看到,1个汉字,其字符长度就是1,但中英文不同的字符所占的字节数不同,导致其占用字节数不同。一个汉字可能占2~4个字节,具体占多少个,取决于采用的编码方式。例如,汉字在GBK/GB2312编码中占用2个字节,而在UTF-8编码中一般占用3个字节。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_03.jpg?sign=1739358674-0Yx60yNZiBUQKc6FF5bV9WSDNOdKvWMC-0-dec217d1b52bd1296c6017f26622a14e)
2-5 分割字符串
3.分割字符串
split()方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_04.jpg?sign=1739358674-SRvjfJeaaL7qZuVUhKVB6rI7dwbk5Eay-0-7715f702a6e48698ef99802c9fc2579e)
式中,str表示要进行分割的字符串;sep用于指定分隔符,可以包含多个字符,此参数默认为None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等;maxsplit是可选参数,用于指定分割的次数,最后列表中子串的个数最多为maxsplit+1,如果不指定或者指定为-1,则表示分割次数没有限制。
在split方法中,如果不指定sep参数,那么也不能指定maxsplit参数。
【例2-37】 字符串的分割。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_05.jpg?sign=1739358674-Z2W31gVGyRU9ReVm0S0Zn7z51UczGrog-0-a32fea6fe90912989f08ac5db1c6ec1a)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_01.jpg?sign=1739358674-L04wVutYvHMgtOSCpDHK9cpxN31rm8j3-0-9946eba106b237398e9b8ddd040a22b1)
4.合并字符串
使用join()方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。
join()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_02.jpg?sign=1739358674-dwaZ9oHHeEifygqGvwJmug7mNsbtAfrD-0-a96749f5f9c8f85956fcbf82f6855a55)
式中,newstr表示合并后生成的新字符串;str用于指定合并时的分隔符;iterable表示做合并操作的源字符串数据,允许以列表、元组等形式提供。
【例2-38】 字符串的合并。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_03.jpg?sign=1739358674-xVOTnfEcKELKO5epOFMJPaFRF6oOccoc-0-1d1b4178e6d19339cc5b7790324098be)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_04.jpg?sign=1739358674-RyTYODlFmTt6UGXQBCSDXJ98xxmrdcCF-0-ddc2cfed2de904d8b987b1c9609096d4)
5.统计字符或字符串出现的次数
count()方法用于检索指定字符或字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回0,否则返回出现的次数。
count方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_05.jpg?sign=1739358674-JWGrNI8PPSiGYXLkQUMOcWEnmkmtUAbq-0-741de4d042af28e4c747c34d72ae91cb)
式中,str表示原字符串;sub表示要检索的字符串;start指定检索的起始位置,也就是从什么位置开始检测,如果不指定,默认从头开始检索;end指定检索的终止位置,如果不指定,则表示一直检索到结尾。
【例2-39】 统计字符出现的频率。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_06.jpg?sign=1739358674-H27QKNHHikEBlxP1bbrdYpPSNxXLNBHV-0-d8955155114414c7030b9ed396f1c9ab)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_07.jpg?sign=1739358674-mhdaM07iNBNQzaQeDHQ3GERhE8fTmMbZ-0-8b8fc3413e553aea08778df0c9aec578)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_01.jpg?sign=1739358674-n9C77yTTlNzoMZfdd6e69QQTP2INHdC8-0-286b2e6a284509d40639dd736cf8d1f3)
6.检测字符串中是否包含某子串
find()方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回-1。
find()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_02.jpg?sign=1739358674-qcBIWkr8EfBulMKnnnd0J6T3k0Ch0AXA-0-208906e50526d6fb1a4d4aa979e26c62)
式中,str表示原字符串;sub表示要检索的目标字符串;start表示开始检索的起始位置。如果不指定,则默认从头开始检索;end表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
Python还提供了rfind()方法,与find()方法最大的不同在于,rfind()是从字符串右边开始检索。
【例2-40】 检索字符串中是否包含目标字符串。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_03.jpg?sign=1739358674-lh3AvP6dBGQw8zIN6ZgPNuBE3y3u4hrT-0-46bad412f325971d9cd0a66bcf5e85a4)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_04.jpg?sign=1739358674-CQGmT0oEoJF4O3Asf3npaUDfpyGLGXOB-0-6f0ade92d89fca3bf13168f6a7fe3f70)
同find()方法类似,index()方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index()方法会抛出异常。
index()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_05.jpg?sign=1739358674-dhWCrTdncsngJGRWa4W6H9I3zmUljqsF-0-3703f979bbf3986406eef4c0139e2dab)
式中,str表示原字符串;sub表示要检索的子字符串;start表示检索开始的起始位置,如果不指定,默认从头开始检索;end表示检索的结束位置,如果不指定,默认一直检索到结尾。
和index()方法类似,rindex()方法的作用是从右边开始检索。
【例2-41】 用index()检索字符串中是否包含目标字符串。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_06.jpg?sign=1739358674-vhq8YRhVHFRwTQfqKtI4aTrsxYOY6bIj-0-e945255f0d98c80be4d58e95aed086bd)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_07.jpg?sign=1739358674-wSEM2zLYke9EXo0q2K6BfKyEZEDA1hsO-0-2735519f830ecb7607efaab0d828196c)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_01.jpg?sign=1739358674-dE8Fmg87Tzn8gIlc46F6o8i9Bppf7d62-0-95664917cf5bb487c401ce1cd33913bf)
startswith()方法用于检索字符串是否以指定字符串开头,如果是,返回True;反之返回False。此方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_02.jpg?sign=1739358674-9dApfjXbHgFkhdWN2Qjcj9I4j6V1IlLj-0-16f58fe793fd1725388bdccc8f6f4880)
式中,str表示原字符串;sub表示要检索的子串;start表示指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;end表示指定检索的结束位置索引,如果不指定,则默认一直检索到结束。
endswith()方法则用于检索字符串是否以指定字符串结尾,如果是则返回True;反之则返回False。该方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_03.jpg?sign=1739358674-pPIaXz9YFyxva35M3oFxwSbAMy1Oc3zh-0-27352b1383011ed6f697ae7df491bdb7)
7.字符串对齐
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_04.jpg?sign=1739358674-weU3mZ87LJQalawoMWqTKGrzxi57vch5-0-8664ab27e88a23beec06e936ebcabe7b)
2-6 字符串对齐
Python提供了3种可用来进行文本对齐的方法,分别是ljust()、rjust()和center()方法。
ljust()方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的,基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_05.jpg?sign=1739358674-Kw9jnsfQG7cRZESxzf4NvHEbvbpszpSa-0-98f36395a1108b60edd0d9876ee89ca9)
式中,S表示要进行填充的字符串;width表示包括S本身长度在内,字符串要占的总长度;fillchar作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
rjust()和ljust()方法类似,唯一的不同在于,rjust()方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的,其基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_06.jpg?sign=1739358674-dQd1ylNYJwCHxCe8ax1KwFYZ3mL46gmN-0-f4231230c60a2902523d4bdc65dd48b1)
center()字符串方法与ljust()和rjust()的用法类似,但它让文本居中,而不是左对齐或右对齐,其基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_07.jpg?sign=1739358674-hp6kB6UoeQJAOjSNRlrzcblVO42KT3XS-0-4d14f3a3db71e6e3e9bfc262cb64ce10)
【例2-42】 字符串的对齐。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_08.jpg?sign=1739358674-aElt1gARTB5crlNAfPKLLSqkcL3xZVVH-0-f30ad6b0f04280c40f582bc680045f23)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_09.jpg?sign=1739358674-xQMB1RNjHPjEtobZjfnkVbG7urYOdaIH-0-3ea90c2490fd7407df012ad1f82e21e5)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/72_01.jpg?sign=1739358674-5BipIkCTmYnJLKpCylAIwpdai9IqBZSE-0-8115ceb9d636b6a430fc56ba61d7c6fa)
8.字符串的其他方法
为了方便对字符串中的字母进行大小写转换,字符串变量提供了3种方法,分别是title()、lower()和upper()。
title()方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要转换的字符,此方法会将字符串原封不动地返回。title()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/72_02.jpg?sign=1739358674-GhIVDJhNy6JSuchzB1k3m60Wr0NHXquI-0-95a58126ee9375a8d01a8b69b9f06c40)
lower()方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
upper()的功能和lower()方法恰好相反,它用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。
Python还提供了3种方法来删除字符串中多余的空格和特殊字符,它们分别是:
● strip()方法用于删除字符串前后(左右两侧)的空格或特殊字符;
● lstrip()方法用于删除字符串前面(左边)的空格或特殊字符;
● rstrip()方法用于删除字符串后面(右边)的空格或特殊字符。