- Python 3.6零基础入门与实战
- 王启明
- 2554字
- 2021-03-30 10:53:08
2.4 字符串
字符串变量的定义特别简单,直接赋值即可,例如:
str1 = 'Hello World!'
如果我们要操作字符串,比如拆分、连接、获取字符串的一部分,就需要学习字符串的运算符、内置操作函数等内容。本节将逐一介绍这些知识点。
2.4.1 字符串的单引号、双引号、三引号
字符串赋值时可以使用单引号、双引号、三引号形式。单引号和双引号并没有太大的区别,比如:
str1 = 'Hello World!' str2 = "I'm fine,and you?"
注 意
如果字符串中包含单引号就要使用双引号进行定义。
如果是特别长的字符串换行时,单引号和双引号需要加“\”符号,例如:
str1 = 'Hello \ World!' str2 = "I'm fine,\ and you?"
“\”符号又会涉及一些字符串的转义,为了更直观,特别长的字符串可以使用三引号,例如:
str3=''' this is world '''
这3种方法并没有太大的区别,读者可根据实际生产环境使用。
2.4.2 字符串的截取
说得好没有练得好,还是先来演练一下:
【示例2-4】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P44_49820.jpg?sign=1739473690-4btEFeHo1ohwsaS5qzWPZfQXZS7VNhmc-0-75789c7bfb84b4ecf1567b2ec025685e)
以上执行结果如图2.4所示。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P45_12383.jpg?sign=1739473690-TGxYFtzGDWxVVL5nRqKWR6CIMH6QBIdC-0-052ec1ada5affe13b58b5b699e3e0e20)
图2.4 字符串的截取
代码定义了两个字符串str1和str2,并分别对它们进行了不同形式的字符串截取操作。str1有4个操作:
• str1[1],表示截取第几个字符,这个编号从0开始,0表示第1个字符,1表示第2个字符。
• str1[2:5],表示截取从第1个参数开始到第2个参数前一位的字符。注意,这是从第几位到第几位,并不是从第2位截取长度为5的字符。
• str1[-2:1],从输出结果看这个并没有输出任何字符。-2表示从倒数第2位开始选择,这里要注意倒数开始的时候编号不是从0开始的。
• str1[5:5],没有输出任何结果。第1个参数的值必须小于第2个参数。
str2有5个操作:
• str2[0],表示截取第1个字符。
• str2[:5],第1个参数为空,表示从头开始截取。
• str2[6:],第2个参数为空,表示截取到字符串的最后。
• str2[-2:],表示从倒数第2个开始截取,一直到字符串的最后。
• str2[:-2],表示从头开始截取,一直到倒数第2位。
说 明
这种截取部分数据的功能有一个专门的概念,叫切片(Slice)。从倒数开始截取数据的功能也叫倒数切片。大部分语言的字符串操作都支持切片功能,Python中很多数据类型都支持切片。
2.4.3 字符串的拼接
字符串的拼接有3种方法:+符号、join函数和格式化拼接。
(1)使用+符号拼接比较简单,代码如下:
【示例2-5】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P45_49822.jpg?sign=1739473690-uSjexRgqLfxrMXS8gT4TA2jGlIu17pSQ-0-675778df1987104225656bc3ccb88646)
因为使用+符号拼接后的字符串需要划定新的内存空间来存储,所以普遍认为这种拼接方式效率低,尤其是越多的字符串拼接效率就越低。
(2)使用join函数拼接则稍显复杂,函数语法如下:
str.join(sequence)
sequence是要拼接的字符串序列,str是拼接需要使用的字符,如空格、逗号等。因此,在使用该函数时要定义两个变量,举例如下:
【示例2-6】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P46_49825.jpg?sign=1739473690-Virxc2B8hYvxvARNPfKyZVXnNBUa8JrF-0-3ae17e623e57e46b8b87299829c9f681)
(3)格式化拼接需要用到格式化符号,我们在这里先举例,具体格式化符号的使用,后面会详细介绍。%s表示需要字符串参数,中间的%表示这是一段格式化输出,后面的参数用括号封闭,用逗号间隔。
【示例2-7】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P46_49826.jpg?sign=1739473690-0xv9NUvnF74B4NqSuwFvWr7f9K4g8z0N-0-062bd4427544814cf8c5ce9ea43aa752)
2.4.4 字符串的各种常用运算符
前面学习过数字运算符有+、-、*、/等,字符串也是有运算符的,不过不是加减乘除,而是一些针对字符串操作的符号,如前面介绍过的+、[]、[:]都是字符串的运算符。常用的字符串运算符参见表2.2。
表2.2 字符串常用运算符
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T46_49827.jpg?sign=1739473690-uZmwrakwW7CrCFsXYveNEDt6DbYDKLpf-0-2a8b912c2848e06942c818f22020cc8d)
这里要特别讲解一下r的使用,字符串有很多转义符号,如\n表示换行、\r表示回车,如果我们要在字符串中显示\n,而不是当作换行使用,此时就需要在字符串前添加r,比如:
print (r"这里介绍\n的使用") print ("这里介绍\n的使用")
这两行的输出结果如图2.5所示,其中第2个输出中有换行操作。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P47_12666.jpg?sign=1739473690-QXKiTdaOmPnE8ug6kzijuXGogEorKmXU-0-68aaf78271b87647a7d47b6b610c6df8)
图2.5 有转义和没有转义的对比
2.4.5 字符串的转义
字符串中的转义就是说字符本身并不是它原来的字面意思。字符串的转义符号都是以\开头的,常用的转义符号参见表2.3。
表2.3 转义符号
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T47_49830.jpg?sign=1739473690-CYc7sMFTdNYfVzrluG1eCBhJIwYZRqAc-0-a25b30f135e14a6b7eb55c05f864e973)
注 意
八进制是\0(零),不是字母o。
这里要特别说明一下\0和\x,它们后面跟的是代表某个字符的数据,而这个数据来自ASCII码表,如图2.6所示是部分表2.3的内容,圈出的位置就是表2.3中的换行符,比如\010代表退格键,\x0D代表回车键。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P48_12858.jpg?sign=1739473690-rgfJZP4caHzoysCdmihh3EDgXyzmMkQS-0-66bf99a9473f13e9937573e3120f3277)
图2.6 ASCII码表
我们来看一个例子。
【示例2-8】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P48_49831.jpg?sign=1739473690-TkffHnsp7qYr4WCSUHdRSlracvKFtPEM-0-ddf52d828ea2ab4e1c99c3214b4f47d2)
上述代码的执行结果如图2.7所示。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P48_12905.jpg?sign=1739473690-TIbh30DndcnmzNnnXDbytutOMhap0SFp-0-6a495ac5e471f3ac58e6aa73f4038f0a)
图2.7 各种转义符号的使用
2.4.6 字符串的格式化符号
在日常开发中,使用print函数经常会用到字符串的格式化符号,如果要输出一个字符串,就用%s;如果要输出一个整数,就用%d。常见的格式化符号参见表2.4。
表2.4 格式化符号
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T49_49832.jpg?sign=1739473690-XgSUj3RfK0Tc0oLlJrJdj8jisp2jCxqQ-0-c90bc3f2136f33c95d996fccb554dc51)
我们可以把格式化字符串想象成带有几个填空项的模板。比如:
____的数据成绩是____
第一个填空项是人名(字符串),第二个填空项是分数(整数),在代码中就是:
%s的数据成绩是%d
输出后的内容与模板一模一样,只将填空的内容填上即可。下面在代码中输入填空项:
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P49_49834.jpg?sign=1739473690-4Juk9TXHnKfbi3LeEManSblCLo9USR8u-0-10ce35ed03f9d54ed456f481fdf7105e)
在模板和具体内容之间有一个%,表示这是一个格式化操作。具体填写的内容用括号封闭起来,多个参数之间用逗号间隔。如果只有一个参数,就可以省略括号。
我们还可以在格式化符号前添加几类符号:
• -,左对齐标志,默认为右对齐。
• +,表示应该包含数字的正负号。
• 0,表示用0填充。
下面再看一段代码:
【示例2-9】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P49_49835.jpg?sign=1739473690-YCitGXysA1RsqbTFXRoezAWOXkigNeJJ-0-47220b2766e79622927ba09e8a1f8b78)
输出结果如图2.8所示。在第1行的输出中,%5s表示字符串长度为5,但因为给出的参数只有3位,所以前面补充了两个空格进行输出(默认用空格填充);%03d表示长度为3的整数,长度不够时前面用0填充,输出的是098。默认情况下,数值的+号是不输出的,但如果使用+这个符号,则正负号都会输出。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P50_13130.jpg?sign=1739473690-FhILcs4BvpKSLH57bujrVqorRa7pSJxN-0-89550629ce5f9347cc014b2eccc6ee37)
图2.8 格式化输出
除了各种符号外,Python也提供了一个格式化函数format。它通过“{}”和“:”代替传统%操作。format函数的特色就是可以接受无限个参数,而且位置可以不按模板的顺序,这和我们前面所说的填空的例子略有不同。
【示例2-10】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P50_49836.jpg?sign=1739473690-oYiM48X5kn4oClMGst85cMoRjf3GTS5O-0-7f672e3ea4f7b7015cbea554524d7c71)
这里用“{}”表示模板中每个填空的位置,如果不按固定的顺序,就可以按{0}指定顺序,如第3行代码的{2}使用了两次,也就是第3个参数被调用两次。
“{}”和“:”的组合通常用于数值的格式化,表2.5是一些通用的格式化写法。
表2.5 格式化写法
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T50_49837.jpg?sign=1739473690-wMIitxZN5J58xZMFHz27Pexai5YLr7xz-0-c22dd4ee20391d4ecb9053d0d8afe4f1)
下面是一段代码:
【示例2-11】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P50_49838.jpg?sign=1739473690-Ztk3wPWeqwl1jKlnLHZCvNWHraVpXCVr-0-984b3c2063964dd3b6da339274d86ba8)
输出结果如图2.9所示。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P50_13276.jpg?sign=1739473690-PWsVYWww4SBRrATTyAtAc6t8aviAsSdL-0-fc95c32f7eb455bd5df5a52c59a53197)
图2.9 格式化数字
2.4.7 字符串的内置函数
函数的使用想必读者已经不再陌生,前面也介绍过join拼接字符串、format格式化字符串等函数。常用的字符串内置函数还包括表2.6所示的这些。
表2.6 内置函数
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T51_49840.jpg?sign=1739473690-LUhiAWEDyWDLss18Ml4LHnd8UHO4ozC5-0-ed7607085c8afdc922718d2fe80a0878)
(续表)
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-T52_49841.jpg?sign=1739473690-yK1EB46rzNRfL35mXuDZYvZi2f8nv6jH-0-c63365b127aeb63b0d12124982a2cc88)
这里要特别说明的是translate函数,它需要一个table参数,这个table一般称为翻译表或转换表。比如根据最新广告法规定,不允许使用“最好的”“最厉害的”这类用语,还有网站也经常需要过滤一些不文明用语,这时候就可以制作一个翻译表,比如将“最”替换为“*”。翻译表使用maketrans函数制作,下面给一个详细的例子:
【示例2-12】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P52_49842.jpg?sign=1739473690-CG2YCxgLPDlhgmSpI1NbeEg3UNEvUhOq-0-203fa9450839ef586da7d75faa19c7c0)
上述代码输出结果如图2.10所示。首先使用maketrans函数制作一个翻译表(“最”翻译为“*”),然后使用translate函数输出翻译后的字符串。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P52_13769.jpg?sign=1739473690-kOklNy5QE9L5e1IHhwvd2C9csKgXVrbe-0-2ebc4b14296598ec6f25bad92aed956f)
图2.10 翻译表