概述
字符串(string)是Python语言的基本数据类型之一,可简单理解为使用英文半角双引号(" ")或单引号(' ')引起来的由各种字符(字母、汉字、数字、符号等)按照先后顺序组成的一串或长或短的有序序列(钟勇 2023:34)。譬如,"python"、'94'、"頑張る%77ja--"等都是合法的字符串。其中,字符串'94'去除两边的单引号就会变成整数94,即'94'和94是完全不同的数据类型。
字符串中的每个字符即为组成该字符串的各个元素,每个元素都被分配了一个索引号(即序号)。需特别注意的是,字符串中的字符元素索引号从0(而不是1)开始依次递增,即第1个字符(如"python"中的p)的索引号为0,第2个字符(如"python"中的y)的索引号为1,第3个字符(如"python"中的t)的索引号为2……依此类推。此外,也可使用倒数的方式来获得索引号,即字符串中最后1个字符的索引号为-1,倒数第2个字符的索引号为-2,倒数第3个字符的索引号为-3……依此类推。
与字符串相关的常用操作主要有索引访问、运算处理、类型转换、替换等。
索引访问
通过字符索引号可以十分便捷地访问和提取出字符串中相关索引号对应的单个字符或连续多个字符(即子字符串)。具体说来,基于索引号访问字符时,只需在字符串后面添加一个方括号([]),并在括号中填写待访问的单个字符的索引号(如[1])或待访问的子字符串的相关索引号范围(如[0:3],0为起始索引号,3为终止索引号)。这种基于索引号范围的访问在编程领域经常被称之为“切片”。
需要注意的是,当方括号中为索引号范围时,提取到的子字符串并不包括终止索引号所对应的字符,而仅包括终止索引号前一个索引号对应的字符。例如,[0:3]只能提取到索引号0、1、2对应的字符,而不能提取到终止索引号3所对应的字符。此外,当终止索引号省略时,可提取到起始索引号至最后一个索引号所对应的字符;而当起始索引号省略时,则可提取到第一个索引号(即0)至终止索引号前一个索引号所对应的字符。请看以下代码示例。
1 name = '田中花子'
2 print(name[1]) # 通过索引号访问和提取单个字符
3 print(name[0:3]) # 通过索引号范围访问和提取子字符串
4 print(name[:3]) # 通过省略起始索引号的方式访问和提取子字符串
5 print(name[1:]) # 通过省略终止索引号的方式访问和提取子字符串
6 print(name[-3:-1]) # 通过倒数索引号范围访问和提取子字符串
我们在第2行代码中通过索引号1访问和提取了字符串变量name中的单个字符'中',在第3行代码中通过索引号范围(0:3)访问和提取了一个子字符串'田中花',在第4、5行代码中分别通过省略起始索引号(:3)和终止索引号(1:)的方式访问和提取了子字符串'田中花'和'中花子',在第6行代码中则通过倒数索引号范围(-3:-1)访问和提取了子字符串'中花'。
运算处理
针对字符串的运算一般只能使用算术运算符中的加号和乘号。其中,加号可以将两个字符串拼接起来,而乘号则可让某个字符串重复指定次数。请看以下代码示例。
1 str1 = "こんにちは"
2 str2 = "世界"
3 result1 = str1 + str2 # 使用加号将str1和str2中的字符串拼接起来
4 print(result1)
5 result2 = result1 * 3 # 使用乘号让result1中的字符串重复3次
6 print(result2)
我们在第3行代码中使用加号将变量str1和str2中的字符串拼接起来,在第5行代码中使用乘号让变量result1中的字符串重复了3次。
类型转换
字符串与数字在形式上较为类似,有时容易混淆。我们可以使用内置函数str()将数字转换为字符串,也可以使用之前介绍过的int()或float()函数将字符串转换为数字。str()函数的常用语法结构为str(object),参数object表示数字等需要转换为字符串的对象。请看以下代码示例。
1 float_str = str(10.43) # 将浮点数10.43转换为字符串
2 print(float_str, "(注:这是一个字符串)") # 在同一行依次打印float_str变量中的字符串以及字符串"(注:这是一个字符串)"
3 float_num = float(float_str) # 将float_str变量中的字符串转换为浮点数
4 print(float_num, "(注:这是一个浮点数)") # 在同一行依次打印float_num变量中的浮点数以及字符串"(注:这是一个浮点数)"
我们在第1行代码中调用str()函数将浮点数10.43转换为字符串,通过第2行代码在同一行依次打印float_str变量中的字符串(即"10.43")以及字符串"(注:这是一个字符串)"(二者通过英文半角逗号隔开),在第3行代码中调用float()函数将float_str变量中的字符串再次转换为浮点数,最后通过第4行代码在同一行依次打印float_num变量中的浮点数(即10.43)以及字符串"(注:这是一个浮点数)"。
替换
当我们想要替换某字符串中特定子字符串的内容时,可通过内置方法replace()来实现。该方法的常用语法结构为“str.replace(old, new)”,参数old用来指定要被替换的旧的子字符串,参数new则表示用于替换old的新子字符串。
Python中的方法和函数比较类似,二者的主要区别在于:当以“对象.处理方式”的结构专门针对某对象调用某处理方式时,该处理方式称为方法;而将某对象直接作为参数投入到某处理方式当中时(如前文提及的str(10.43)),该处理方式则称为函数(钟勇 2023:35)。某种意义上,方法可理解为专门用于某类特定对象的函数,具有一定的特殊性,而通常所说的函数则无固定使用对象,具有一定的普适性。请看以下代码示例。
1 string = "こんにちは、世界!こんにちは、世界!"
2 string_replace = string.replace("世界", "田中先生") # 用新子字符串"田中先生"替换所有的旧子字符串"世界"
3 print(string_replace)
我们通过第2行代码针对变量string中存储的字符串对象调用replace()方法,使用新子字符串"田中先生"替换了string中字符串包含的所有旧子字符串"世界"。
参考文献
1. 钟勇, 2023. Python日语数字人文之语料库语言学技术及其应用[M]. 南京: 东南大学出版社.
同系列其他文章: