🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 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 &lt;module&gt; name[1] = "i" TypeError: 'str' object does not support item assignment ``` 其中最后一行的意思是:str 类型的数据不支持对其成员的赋值。name[1]是字符串"Tom" 的第 2 个成员,因此不能对其进行赋值! 最后,我们将以上介绍的各种基本字符串操作整理成表 2.4,以方便查阅。 | 字符串操作 | 含义 | | --- | --- | | [] | 索引操作 | | [:] | 切分操作 | | + | 合并字符串 | | * | 复制字符串 | | len(&lt;字符串&gt;) | 字符串长度 | | &lt;字符串 1&gt; in &lt;字符串 2&gt; | 子串测试 | 表 2.4 字符串操作