2.3.2 字符串类型的操作
2.3.2 字符串类型的操作
在实际应用中,对字符串最常用的操作是访问字符串中的个别字符。Python 语言为字
符串类型提供了索引操作,可以用来访问字符串内部的任意组成字符。 字符串是字符序列,每个字符在序列中的位置都由一个从 0 开始的整数编号指定,这个
编号称为位置索引。因此,第一个位置的索引是 0,第二个位置的索引是 1,依此类推。通 过索引我们可以指定字符串中的任意位置,从而可以访问该位置上的字符。下面是通过索引 操作访问字符串内容的一般形式:
<字符串>[<数值表达式>]
数值表达式的值就是位置索引,整个索引操作的返回结果就是索引位置上的字符。例如:
>>> s = "Good morning!"
>>> s[0]
'G'
>>> s[12]
'!'
>>> i = 8
>>> s[i+4]
'!'
注意,在长度为 n 的字符串中,最后一个字符的索引位置是 n-1。初学者很容易犯的一 个错误是:因为字符串 s 的长度为 12,所以通过 s[12]来访问其最后一个字符。务必记住, 计算机科学和程序设计中,习惯是从 0 开始计数。
Python 还支持从后往前的索引方式:索引-1 代表倒数第一个位置,索引-2 代表倒数第 二个位置,依此类推。利用这个表示法,无需知道字符串长度即可访问最后一个字符:
>>> s[-1]
'!'
以上是通过索引操作访问字符串中的单个字符,Python 也支持通过索引操作来访问字 符串的子串,方法是指定字符串的一个索引区间。这种操作也称为切分。切分操作的一般形 式是:
<字符串>[开始位置:结束位置]
其中开始位置和结束位置都是 int 类型的表达式,含义是返回字符串中从开始位置到结束位置(不含结束位置!)的一个子串。开始位置和结束位置是可选的,在没有指定的情况下 Python
默认开始位置为 0,结束位置为 n。承接上面的例子继续进行如下切分操作:
>>> s[0:3]
'Goo'
>>> s[5:13]
'morning!'
>>> s[:10]
'Good morni'
>>> s[5:]
'morning!'
>>> s[:]
'Good morning!'
>>> s[2:-2]
'od mornin'
除了索引操作,字符串类型还支持字符串的合并(+)、复制(*)、子串测试(in)操作, 并提供一个求字符串长度的内建函数 len()。其中子串测试返回一个布尔值(True 或 False), 关于布尔类型参见 2.4 节。例如:
>>> "Good" + "Bye"
'GoodBye'
>>> 2 * "Bye" 'ByeBye'
>>> "ok" in "cook"
True
>>> len("Good"*3 + 2*"Bye")
18
在应用程序中有时也许会希望修改一个字符串,正如现实世界中有人去派出所修改自己 的名字一样。利用索引机制似乎很容易实现修改字符串的功能,例如下面的语句试图将 "Tom"改成"Tim":
>>> name = "Tom"
>>> name[1] = "i"
但很遗憾,Python 中的字符串类型的值是不能修改的!上述操作将导致如下结果:
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module> name[1] = "i"
TypeError: 'str' object does not support item assignment
其中最后一行的意思是:str 类型的数据不支持对其成员的赋值。name[1]是字符串"Tom" 的第 2 个成员,因此不能对其进行赋值!
最后,我们将以上介绍的各种基本字符串操作整理成表 2.4,以方便查阅。
字符串操作 | 含义 |
---|---|
[] | 索引操作 |
[:] | 切分操作 |
+ | 合并字符串 |
* | 复制字符串 |
len(<字符串>) | 字符串长度 |
<字符串 1> in <字符串 2> | 子串测试 |
表 2.4 字符串操作