2.3.2 字符串类型的操作

在实际应用中,对字符串最常用的操作是访问字符串中的个别字符。Python 语言为字

符串类型提供了索引操作,可以用来访问字符串内部的任意组成字符。 字符串是字符序列,每个字符在序列中的位置都由一个从 0 开始的整数编号指定,这个

编号称为位置索引。因此,第一个位置的索引是 0,第二个位置的索引是 1,依此类推。通 过索引我们可以指定字符串中的任意位置,从而可以访问该位置上的字符。下面是通过索引 操作访问字符串内容的一般形式:

  1. <字符串>[<数值表达式>]

数值表达式的值就是位置索引,整个索引操作的返回结果就是索引位置上的字符。例如:

  1. >>> s = "Good morning!"
  2. >>> s[0]
  3. 'G'
  4. >>> s[12]
  5. '!'
  6. >>> i = 8
  7. >>> s[i+4]
  8. '!'

注意,在长度为 n 的字符串中,最后一个字符的索引位置是 n-1。初学者很容易犯的一 个错误是:因为字符串 s 的长度为 12,所以通过 s[12]来访问其最后一个字符。务必记住, 计算机科学和程序设计中,习惯是从 0 开始计数。

Python 还支持从后往前的索引方式:索引-1 代表倒数第一个位置,索引-2 代表倒数第 二个位置,依此类推。利用这个表示法,无需知道字符串长度即可访问最后一个字符:

  1. >>> s[-1]
  2. '!'

以上是通过索引操作访问字符串中的单个字符,Python 也支持通过索引操作来访问字 符串的子串,方法是指定字符串的一个索引区间。这种操作也称为切分。切分操作的一般形 式是:

  1. <字符串>[开始位置:结束位置]

其中开始位置和结束位置都是 int 类型的表达式,含义是返回字符串中从开始位置到结束位置(不含结束位置!)的一个子串。开始位置和结束位置是可选的,在没有指定的情况下 Python

默认开始位置为 0,结束位置为 n。承接上面的例子继续进行如下切分操作:

  1. >>> s[0:3]
  2. 'Goo'
  3. >>> s[5:13]
  4. 'morning!'
  5. >>> s[:10]
  6. 'Good morni'
  7. >>> s[5:]
  8. 'morning!'
  9. >>> s[:]
  10. 'Good morning!'
  11. >>> s[2:-2]
  12. 'od mornin'

除了索引操作,字符串类型还支持字符串的合并(+)、复制(*)、子串测试(in)操作, 并提供一个求字符串长度的内建函数 len()。其中子串测试返回一个布尔值(True 或 False), 关于布尔类型参见 2.4 节。例如:

  1. >>> "Good" + "Bye"
  2. 'GoodBye'
  3. >>> 2 * "Bye" 'ByeBye'
  4. >>> "ok" in "cook"
  5. True
  6. >>> len("Good"*3 + 2*"Bye")
  7. 18

在应用程序中有时也许会希望修改一个字符串,正如现实世界中有人去派出所修改自己 的名字一样。利用索引机制似乎很容易实现修改字符串的功能,例如下面的语句试图将 “Tom”改成”Tim”:

  1. >>> name = "Tom"
  2. >>> name[1] = "i"

但很遗憾,Python 中的字符串类型的值是不能修改的!上述操作将导致如下结果:

  1. Traceback (most recent call last):
  2. File "<pyshell#25>", line 1, in &lt;module&gt; name[1] = "i"
  3. TypeError: 'str' object does not support item assignment

其中最后一行的意思是:str 类型的数据不支持对其成员的赋值。name[1]是字符串”Tom” 的第 2 个成员,因此不能对其进行赋值!

最后,我们将以上介绍的各种基本字符串操作整理成表 2.4,以方便查阅。

字符串操作含义
[]索引操作
[:]切分操作
+合并字符串
*复制字符串
len(<字符串>)字符串长度
<字符串 1> in <字符串 2>子串测试

表 2.4 字符串操作