![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=1738844732-werkn0mRumCl4H4r8OvWEEVUfV74qdfa-0-0ab6ed9c5bebaacea8871f89db945c73)
式中,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=1738844732-3ga33JANshezqUx6iPdL86pwh67sj1F3-0-a576a0df1b837a2c157368d6607e791a)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_03.jpg?sign=1738844732-zPHPzUobugtHC4hK15S9Jv08ZEI8BoNP-0-630ba5509660d9447baa925546fc445a)
2.获取字符串长度或字节数
字符串的长度一般用len函数,其基本语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/67_04.jpg?sign=1738844732-bjdMQKK8t4Hgg1iTiTX1JhHPKPvCboyi-0-1fc57c33a1490a3636c19675b11bce8d)
式中,string用于指定要进行长度统计的字符串。
字符串长度不等于字节数,后者需要使用encode()方法将字符串进行编码后再获取它的字节数。
【例2-36】 字符串的长度与字节数。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_01.jpg?sign=1738844732-ZTdDpG7bUL8Kjbck1IA10yqtU40P06Ru-0-a727efde94182b2ea4aef27be1e1d26b)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_02.jpg?sign=1738844732-hxZ1PZzxT9Tl3Yc11x6HEZ8QNm350HZR-0-8456579dfc2367191a3f18e9cfcb8e75)
从例中可以看到,1个汉字,其字符长度就是1,但中英文不同的字符所占的字节数不同,导致其占用字节数不同。一个汉字可能占2~4个字节,具体占多少个,取决于采用的编码方式。例如,汉字在GBK/GB2312编码中占用2个字节,而在UTF-8编码中一般占用3个字节。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_03.jpg?sign=1738844732-bzo5fsdTNs7RG3XHTZpTEI6aD7bmea0j-0-36ec6995ef0f2950de0c9e22865e479f)
2-5 分割字符串
3.分割字符串
split()方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/68_04.jpg?sign=1738844732-aGLHWYKEx4GzWSkIxYbfESk1UuDfPZw4-0-b987184f78d1f230752ab6f21b309921)
式中,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=1738844732-KpBYSN2LQyMKA8WPC475sUOuS8QuISrS-0-bbcc61c4e746935500a5b84bde42fb22)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_01.jpg?sign=1738844732-tquPtHfxd0PTvVHnC5DKImHfGEqaB4XR-0-a764ac2987bca2ff86c5dc97568c63c0)
4.合并字符串
使用join()方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。
join()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_02.jpg?sign=1738844732-9iEsxRYDJEBEh3npwrSg0j6F9hCsbmNn-0-0c566fb4c15563e35903af6330ee908c)
式中,newstr表示合并后生成的新字符串;str用于指定合并时的分隔符;iterable表示做合并操作的源字符串数据,允许以列表、元组等形式提供。
【例2-38】 字符串的合并。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_03.jpg?sign=1738844732-VOydOVOiz9yPO8aIR4EBC8QFqygO8Dj3-0-70c5ceb1b8e6368fa411db504b4b602b)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_04.jpg?sign=1738844732-NCN9o62JPwhEuqzmSE2hYJFU0wreUcQQ-0-ec1d27acb4709c7d56a1c232e3ebaeec)
5.统计字符或字符串出现的次数
count()方法用于检索指定字符或字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回0,否则返回出现的次数。
count方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_05.jpg?sign=1738844732-5HyHQEAnvLJQQxsx4hFvYqMN9Yq99W92-0-1322be141d718ed7132b7959828453bf)
式中,str表示原字符串;sub表示要检索的字符串;start指定检索的起始位置,也就是从什么位置开始检测,如果不指定,默认从头开始检索;end指定检索的终止位置,如果不指定,则表示一直检索到结尾。
【例2-39】 统计字符出现的频率。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_06.jpg?sign=1738844732-aMqFFZ5gT1xJSDA5pizVjZ4mitbCobCz-0-4e364a98bb80aa664e331b6232145b3d)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/69_07.jpg?sign=1738844732-W1yuvfEmjpdyGUeYLr2xzsido6TyViF9-0-62f5b4dd63fad5aab20c27b876dda60c)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_01.jpg?sign=1738844732-E5eOVdaRhClhKF9Q2sfr2YCE0ovDVYBx-0-500f70ba5f0d30bcd07b999f7f041d9f)
6.检测字符串中是否包含某子串
find()方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回-1。
find()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_02.jpg?sign=1738844732-KXUK07e2zvGcBcQk0hYgixHiJ7PsBAdG-0-95313ef9e38671390a838732b4c17fbc)
式中,str表示原字符串;sub表示要检索的目标字符串;start表示开始检索的起始位置。如果不指定,则默认从头开始检索;end表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
Python还提供了rfind()方法,与find()方法最大的不同在于,rfind()是从字符串右边开始检索。
【例2-40】 检索字符串中是否包含目标字符串。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_03.jpg?sign=1738844732-S33nlYe3Q3c4dC2kKIbUfB4SUVhx0cmh-0-a6cb14b4d705137e84df643aa376617c)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_04.jpg?sign=1738844732-m6uWPWI74p4Bb9alQdgADqe0L4ddUqTS-0-524fbd756a7d133cccc35b2259353d8b)
同find()方法类似,index()方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index()方法会抛出异常。
index()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_05.jpg?sign=1738844732-qiQVUFUfRajmhvtuoSzvOSEuG1F5Q3vp-0-a2fa7d87dd1d11b4715b608b098c15f6)
式中,str表示原字符串;sub表示要检索的子字符串;start表示检索开始的起始位置,如果不指定,默认从头开始检索;end表示检索的结束位置,如果不指定,默认一直检索到结尾。
和index()方法类似,rindex()方法的作用是从右边开始检索。
【例2-41】 用index()检索字符串中是否包含目标字符串。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_06.jpg?sign=1738844732-l8KZaJ9pkWryQR3a2ykxYv6cgC3qNdnZ-0-6686ae1ce7698ae122ce06f08e6ed27d)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/70_07.jpg?sign=1738844732-6YODUmNFyHzqxjXYA3cBABUCtouPMXdL-0-6ab2dca3b16fb34bafc45f3e5725b01c)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_01.jpg?sign=1738844732-s10YdoEj4hZu0URepl0nvDLjIpMjoSaD-0-f799106bfe40a590c7174b4da6d00e76)
startswith()方法用于检索字符串是否以指定字符串开头,如果是,返回True;反之返回False。此方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_02.jpg?sign=1738844732-GUgEm6ceGAM5p5uoCydeuW5vZK9c2ECB-0-48d3e18d9865ec5f7cbb456fd8f5c936)
式中,str表示原字符串;sub表示要检索的子串;start表示指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;end表示指定检索的结束位置索引,如果不指定,则默认一直检索到结束。
endswith()方法则用于检索字符串是否以指定字符串结尾,如果是则返回True;反之则返回False。该方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_03.jpg?sign=1738844732-V1ol2E9UtFHm6pK5AhLOzQxMxPxz7h4S-0-47fbba21eb00474ec7cb773defd5b06a)
7.字符串对齐
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_04.jpg?sign=1738844732-hCxCMJpCPNqb3P9wtm9trirq9VaGvvKR-0-bd035fdf7753f191e63546cc68ed9bf4)
2-6 字符串对齐
Python提供了3种可用来进行文本对齐的方法,分别是ljust()、rjust()和center()方法。
ljust()方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的,基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_05.jpg?sign=1738844732-0fMP7TVRnTo6EPhha1n5yoZCjVMaR5pT-0-0ebffc696c237947e8f0959101f38ddb)
式中,S表示要进行填充的字符串;width表示包括S本身长度在内,字符串要占的总长度;fillchar作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
rjust()和ljust()方法类似,唯一的不同在于,rjust()方法是向字符串的左侧填充指定字符,从而达到右对齐文本的目的,其基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_06.jpg?sign=1738844732-vllcm4UVcmQY0feYLwLC6uWZklaO27B6-0-adbb7a60de5a5d108be211ac1d7b0aff)
center()字符串方法与ljust()和rjust()的用法类似,但它让文本居中,而不是左对齐或右对齐,其基本格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_07.jpg?sign=1738844732-MZfDS9cjjv7SoX5PoD6PwpjgxDsoEGd9-0-6a5a32bfad101c2a13997360ee1bf5cf)
【例2-42】 字符串的对齐。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_08.jpg?sign=1738844732-dV11olvQIfs8XuRbC6BnUxsp7sJJvsGq-0-4addaa9f9c42ac676b8be288712eaed5)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/71_09.jpg?sign=1738844732-OMB4FLvBUWtSrNr3QZgGND9KUAyVUWjV-0-ae76f95bc1bf5042733124c3aba9bd45)
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/72_01.jpg?sign=1738844732-uI2BQwmYi3G5rSekZaWyWVZ8zht4rJLu-0-e30f54fe6afd70b795aa2d75a97e45be)
8.字符串的其他方法
为了方便对字符串中的字母进行大小写转换,字符串变量提供了3种方法,分别是title()、lower()和upper()。
title()方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要转换的字符,此方法会将字符串原封不动地返回。title()方法的语法格式如下:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/72_02.jpg?sign=1738844732-M5MJPudTvRws5SGL1hyoCHjrJpECWljG-0-4704d0ccffbb0997a4d96ed52bee79b7)
lower()方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
upper()的功能和lower()方法恰好相反,它用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。
Python还提供了3种方法来删除字符串中多余的空格和特殊字符,它们分别是:
● strip()方法用于删除字符串前后(左右两侧)的空格或特殊字符;
● lstrip()方法用于删除字符串前面(左边)的空格或特殊字符;
● rstrip()方法用于删除字符串后面(右边)的空格或特殊字符。