Python 字符串切片语法
在 Python 中,字符串也可以像列表那样,使用 “切片” 的方式来截取其中的一部分。
语法:
str[m:n:step]说明:
其中,m 是开始下标,n 是结束下标,step 是步长(默认值为 1)。很多情况下情况下,step 都是缺省(即采用默认值 1)。
m 和 n 可以是正数,也可以是负数,不过 n 一定要大于 m。list[m:n] 的截取范围为 [m, n),也就是包含 m 不包含 n。其中 m 和 n 都可以省略。
- 当 n 省略时,获取的范围为:m 到结尾位置。
- 当 m 省略时,获取的范围为:开头位置到 n。
- 当 m 和 n 同时省略,获取范围为:整个列表。
提示: 列表也有切片的语法,另请参阅:Python 列表切片。
Python 字符串切片示例
接下来,我们通过几个简单的例子来讲解一下 Python 字符串切片是如何使用的。
示例 1:字符串正向切片
s = 'classroom'
print(s[2:5])运行结果如下。
ass分析:
s[2:5] 表示切片截取的范围为 [2, 5),也就是包含 2 但不包含 5(如下图所示)。一定要注意,截取的下标是从 0 开始的,也就是说 0 表示第 1 个字符,1 表示第 2 个字符,依此类推。实际上,在字符串的各种操作中,凡是涉及下标的,都是从 0 开始,这一点和列表的下标是一样的。

注意: 对于 str[m:n] 而言,切片取出的最后一个元素不是 str[n],而是 str[n] 的前一个元素,也就是 str[n-1]。
示例 2:字符串反向切片
s = 'classroom'
print(s[-7: -4])运行结果如下。
ass分析:
对于上面的示例,具体分析如下图所示。

示例 3:str[m:]
s = 'classroom'
print(s[5:])
print(s[-4:])运行结果如下。
room
room分析:
对于上面的示例,具体分析如下图所示。

示例 4:str[:n]
s = 'classroom'
print(s[:5])
print(s[:-4])运行结果如下。
class
class分析:
对于上面的示例,具体分析如下图所示。

示例 5:str[:]
s = 'classroom'
print(s[:])
print(s[:] == s)运行结果如下。
classroom
True提示: 与列表一样,str[:] 这种切片方式可以用于复制一个字符串,这是一个很实用的技巧。
示例 6:str[m:n] 中的 n 超出范围
s = 'classroom'
print(s[5:6])
print(s[5:7])
print(s[5:8])
print(s[5:9])
print(s[5:])运行结果如下。
r
ro
roo
room
room分析:
从上面的示例可以看出,当 str[m:n] 中的 n 超出范围时,运行结果跟 str[m:] 一样,获取的范围都是 m 到结尾位置。
示例 7:带有步长的字符串切片
s = 'classroom'
# 步长为 2
print(s[0:5:2])
# 步长为 -1
print(s[::-1])运行结果如下。
car
moorssalc分析:
s[0:5:2] 的步长为 2,表示每隔一个字符取一个,所以结果是 car。
而 s[::-1] 是 Python 开发中极具特色的一种写法,省略了开始和结束位置,并将步长设为负数,从而巧妙地实现了字符串的倒序输出。
为什么 Python 提供多种切片语法?
到这里,小伙伴可能就会问了:“Python 提供 str[m:n] 这一种切片方式不就够了吗?为什么还要搞出 str[m:]、str[:n]、str[-m:-n] 那么多方式呢?” 想要知道为什么,我们还是先来看一个例子:
s = 'Hello Java C# PHP Ruby Python'对于上面这一句代码,如果想要截取 “Python”,单纯使用正数下标就非常麻烦了,因为需要从左到右一个个地数字符的个数。但使用负数下标(str[-m:-n]),就简单多了。再者,如果想要截取 “Java C# PHP Ruby Python”,单纯使用正数下标也非常麻烦,而使用 str[m:] 的方式却非常简单。
之所以 Python 提供多种切片语法,其实也是为了满足各种开发需求以及提高开发效率。
