Python 字符串简介
在 Python 中,字符串都是用英文单引号或英文双引号(注意都是英文)括起来的。此外,字符串中的字符可以是 0 个(即空字符),也可以是 1 个或多个。
''
'绿叶网'
"绿叶网"在前面 “Python 数据类型” 一节中,小伙伴们已经接触过字符串,并且知道如何简单地使用它,比如两个字符串相加可以拼接成一个新字符串。本章中将进一步介绍字符串的使用,包括多行字符串、原始字符串、字符串方法和切片等。
序列有 3 种:列表、元组和字符串。前面 2 章已经学习过列表和元组了,由于这三种序列的很多操作都是相同的,所以在学习字符串时,我们应该多对比,这样更能加深理解和记忆。

很多编程语言(如 C 语言)会将单一字符作为 “字符”,而将多个字符形成的内容作为 “字符串”。在数据类型上,Python 则没有区分 “字符” 和 “字符串”,单一字符会被当成只有一个字符的字符串处理。对于字符串而言,它的每一个字符都是一个元素。
注意: 字符串是一种不可变的数据结构,所以像修改元素、添加元素、删除元素操作都是不合法的,Python 会直接报错。
Python 字符串操作
对于列表来说,我们可以进行 4 种操作:获取元素、修改元素、添加元素、删除元素。但是字符串和列表不一样,它是一种不可变的数据结构。也就是说,凡是会改变字符串的操作都是不允许的,包括修改元素、添加元素、删除元素。
在 Python 中,我们可以使用 “下标” 的方式来获取字符串中的某一个字符。
语法:
str[n]说明:
在该语法中,str 是一个字符串或字符串名。n 是整数,表示字符串中第 n+1 个字符。注意,字符串第 1 个字符的下标是 0,第 2 个字符的下标是 1,……,第 n 个字符的下标是 n-1,依此类推。这个与列表下标是一样的。
示例 1:字符串使用 “正数下标”
s = 'Python'
print('The 1st char:', s[0])
print('The 4th char:', s[3])运行结果如下。
The 1st char: P
The 4th char: h分析:
对于上面的示例来说,具体分析如下图所示。

示例 2:字符串使用 “负数下标”
s = 'Python'
print(s[-1])
print(s[-3])运行结果如下。
n
h分析:
对于上面的示例来说,具体分析如下图所示。

示例 3:比较字符串
s1 = 'ABC'
s2 = 'ABD'
s3 = 'ABCD'
print(s1 < s2)
print(s1 < s3)运行结果如下。
True
True分析:
在比较两个字符串大小时,程序会从两个字符串的第一个字符开始比较对应的 ASCII 码。如果 ASCII 码相同,则比较下一个字符,如此循环直到出现不同的字符或者遍历完其中一个字符串的所有字符。
对于 s1 < s2 而言,当比较到第 3 个字符时,'D' 的 ASCII 码值比 'C' 的大,因此 s2 更大。对于 s1 < s3 而言,前 3 个字符相同,但 s3 的字符数更多,程序会判断字符数更多的字符串大。
示例 4:找出字符串中小于某个字符的所有字符
s = 'Have a nice day!'
# 定义一个空列表,用来保存结果
result = []
for char in s:
if char < 'h':
result.append(char)
print(result)运行结果如下。
['H', 'a', 'e', ' ', 'a', ' ', 'c', 'e', ' ', 'd', 'a', '!']分析:
在上面的例子中,s 表示最初字符串,result 是一个空列表,用于保存结果。在 for 循环遍历 s,变量 char 表示当前字符,然后与 “h” 比较。如果当前字符小于 “h”,则保存到 result 中。
两个字符之间比较的也是 ASCII 码的大小。请注意,空格在字符串中也是被当成一个字符来处理的。空格的 ASCII 码值是 32,比所有的英文字母都要小,因此也会被保存到结果中。
Python 字符串方法
字符串是 Python 最重要的数据类型之一,因为 Python 为它提供了非常多有用的方法(共 47 个),如下表所示。
| 检索 | |
| startswith() | 检索字符串是否以指定子串开头 |
| endswith() | 检索字符串是否以指定子串结尾 |
| index() | 返回指定子串第一次出现的索引(未找到则报错) |
| rindex() | 返回指定子串最后一次出现的索引(未找到则报错) |
| find() | 返回指定子串第一次出现的索引(未找到则返回 -1) |
| rfind() | 返回指定子串最后一次出现的索引(未找到则返回 -1) |
| 判断 | |
| isupper() | 判断所有字母是否为大写 |
| islower() | 判断所有字母是否为小写 |
| istitle() | 判断是否每个单词首字母大写(标题格式) |
| isalnum() | 判断是否仅由字母和数字组成 |
| isalpha() | 判断是否仅由字母组成 |
| isdecimal() | 判断是否仅由十进制数字组成 |
| isdigit() | 判断是否仅由数字字符组成 |
| isnumeric() | 判断是否仅由数值字符组成(包括 Unicode 数字) |
| isspace() | 判断是否仅由空白字符组成 |
| isascii() | 判断是否仅由 ASCII 字符组成 |
| isidentifier() | 判断是否是有效的 Python 标识符 |
| isprintable() | 判断是否所有字符都可打印 |
| 分割 | |
| split() | 按分隔符拆分字符串为列表 |
| rsplit() | 从右侧按分隔符拆分字符串为列表 |
| partition() | 字符串按分隔符分为三部分(前、分隔符、后) |
| rpartition() | 从右侧开始将字符串按分隔符分为三部分 |
| splitlines() | 将字符串按换行符拆分为列表 |
| 删除 | |
| removeprefix() | 删除指定前缀(如果存在) |
| removesuffix() | 删除指定后缀(如果存在) |
| strip() | 删除开头和结尾的空白字符(或指定字符) |
| lstrip() | 删除开头的空白字符(或指定字符) |
| rstrip() | 删除结尾的空白字符(或指定字符) |
| 替换 | |
| replace() | 将指定子串替换为另一个子串 |
| expandtabs() | 将制表符(\t)替换为指定数量的空格 |
| maketrans() | 创建字符映射转换表(用于 translate()) |
| translate() | 根据映射表转换字符串中的字符 |
| 填充 | |
| ljust() | 将字符串左对齐,并用指定字符填充至指定宽度 |
| rjust() | 将字符串右对齐,并用指定字符填充至指定宽度 |
| center() | 将字符串居中对齐,并用指定字符填充至指定宽度 |
| zfill() | 在字符串左侧用零填充至指定宽度 |
| 大小写 | |
| upper() | 将所有字符转换为大写 |
| lower() | 将所有字符转换为小写 |
| swapcase() | 将大写字符转换为小写,且小写字符转换为大写 |
| capitalize() | 将第一个字符转换为大写,其余字符转换为小写。 |
| title() | 将每个单词的首字母转换为大写 |
| casefold() | 将字符串转换为适合不区分大小写比较的形式(更彻底的小写转换)。 |
| 其他 | |
| count() | 统计指定子串出现的次数 |
| join() | 将可迭代对象中的元素用字符串连接成一个新字符串 |
| format() | 格式化字符串,用指定值替换占位符 |
| format_map() | 使用字典格式化字符串,替换占位符 |
| encode() | 将字符串编码为指定的字节格式 |
提示: 小伙伴们可以通过我们的参考手册 “Python 字符串方法”,来查看所有字符串方法的详细语法。
