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】
以上执行结果如图2.4所示。
图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】
因为使用+符号拼接后的字符串需要划定新的内存空间来存储,所以普遍认为这种拼接方式效率低,尤其是越多的字符串拼接效率就越低。
(2)使用join函数拼接则稍显复杂,函数语法如下:
str.join(sequence)
sequence是要拼接的字符串序列,str是拼接需要使用的字符,如空格、逗号等。因此,在使用该函数时要定义两个变量,举例如下:
【示例2-6】
(3)格式化拼接需要用到格式化符号,我们在这里先举例,具体格式化符号的使用,后面会详细介绍。%s表示需要字符串参数,中间的%表示这是一段格式化输出,后面的参数用括号封闭,用逗号间隔。
【示例2-7】
2.4.4 字符串的各种常用运算符
前面学习过数字运算符有+、-、*、/等,字符串也是有运算符的,不过不是加减乘除,而是一些针对字符串操作的符号,如前面介绍过的+、[]、[:]都是字符串的运算符。常用的字符串运算符参见表2.2。
表2.2 字符串常用运算符
这里要特别讲解一下r的使用,字符串有很多转义符号,如\n表示换行、\r表示回车,如果我们要在字符串中显示\n,而不是当作换行使用,此时就需要在字符串前添加r,比如:
print (r"这里介绍\n的使用") print ("这里介绍\n的使用")
这两行的输出结果如图2.5所示,其中第2个输出中有换行操作。
图2.5 有转义和没有转义的对比
2.4.5 字符串的转义
字符串中的转义就是说字符本身并不是它原来的字面意思。字符串的转义符号都是以\开头的,常用的转义符号参见表2.3。
表2.3 转义符号
注 意
八进制是\0(零),不是字母o。
这里要特别说明一下\0和\x,它们后面跟的是代表某个字符的数据,而这个数据来自ASCII码表,如图2.6所示是部分表2.3的内容,圈出的位置就是表2.3中的换行符,比如\010代表退格键,\x0D代表回车键。
图2.6 ASCII码表
我们来看一个例子。
【示例2-8】
上述代码的执行结果如图2.7所示。
图2.7 各种转义符号的使用
2.4.6 字符串的格式化符号
在日常开发中,使用print函数经常会用到字符串的格式化符号,如果要输出一个字符串,就用%s;如果要输出一个整数,就用%d。常见的格式化符号参见表2.4。
表2.4 格式化符号
我们可以把格式化字符串想象成带有几个填空项的模板。比如:
____的数据成绩是____
第一个填空项是人名(字符串),第二个填空项是分数(整数),在代码中就是:
%s的数据成绩是%d
输出后的内容与模板一模一样,只将填空的内容填上即可。下面在代码中输入填空项:
在模板和具体内容之间有一个%,表示这是一个格式化操作。具体填写的内容用括号封闭起来,多个参数之间用逗号间隔。如果只有一个参数,就可以省略括号。
我们还可以在格式化符号前添加几类符号:
• -,左对齐标志,默认为右对齐。
• +,表示应该包含数字的正负号。
• 0,表示用0填充。
下面再看一段代码:
【示例2-9】
输出结果如图2.8所示。在第1行的输出中,%5s表示字符串长度为5,但因为给出的参数只有3位,所以前面补充了两个空格进行输出(默认用空格填充);%03d表示长度为3的整数,长度不够时前面用0填充,输出的是098。默认情况下,数值的+号是不输出的,但如果使用+这个符号,则正负号都会输出。
图2.8 格式化输出
除了各种符号外,Python也提供了一个格式化函数format。它通过“{}”和“:”代替传统%操作。format函数的特色就是可以接受无限个参数,而且位置可以不按模板的顺序,这和我们前面所说的填空的例子略有不同。
【示例2-10】
这里用“{}”表示模板中每个填空的位置,如果不按固定的顺序,就可以按{0}指定顺序,如第3行代码的{2}使用了两次,也就是第3个参数被调用两次。
“{}”和“:”的组合通常用于数值的格式化,表2.5是一些通用的格式化写法。
表2.5 格式化写法
下面是一段代码:
【示例2-11】
输出结果如图2.9所示。
图2.9 格式化数字
2.4.7 字符串的内置函数
函数的使用想必读者已经不再陌生,前面也介绍过join拼接字符串、format格式化字符串等函数。常用的字符串内置函数还包括表2.6所示的这些。
表2.6 内置函数
(续表)
这里要特别说明的是translate函数,它需要一个table参数,这个table一般称为翻译表或转换表。比如根据最新广告法规定,不允许使用“最好的”“最厉害的”这类用语,还有网站也经常需要过滤一些不文明用语,这时候就可以制作一个翻译表,比如将“最”替换为“*”。翻译表使用maketrans函数制作,下面给一个详细的例子:
【示例2-12】
上述代码输出结果如图2.10所示。首先使用maketrans函数制作一个翻译表(“最”翻译为“*”),然后使用translate函数输出翻译后的字符串。
图2.10 翻译表