Python字符串的索引与切片
在 Python 中,字符串(str)是最常用的数据类型之一。除了直接存储和打印,字符串还支持通过索引(Indexing)和切片(Slicing)来快速访问、提取或组合子串。理解这两个操作,是掌握 Python 字符串处理的关键。
在 Python 中, [] 是专门用于下标和切片的运算符(不同于 C 语言中的数组)。
一、字符串的索引(Indexing)
Python 的字符串可以看作由字符组成的有序序列,每个字符都对应一个位置编号(索引)。

1、正向索引
从左到右编号,从 0 开始。
第一个字符索引为 0,第二个为 1,依此类推。
s = "Python"print(s[0]) # Pprint(s[5]) # n
2、负向索引
从右到左编号,从 -1 开始。
最后一个字符索引为 -1,倒数第二个为 -2,依此类推。
s = "Python"print(s[-1]) # nprint(s[-6])
注意:
如果索引超出范围,会抛出 IndexError。
二、字符串的切片(Slicing)
切片是一种基于索引的子串提取方式。
语法结构:
s[start:end:step]
🔹 start:起始索引,包含该位置,默认 0。
🔹 end:结束索引,不包含该位置,默认 len(s)。
🔹 step:步长。默认为 1,可为负数。
使用切片时,必须包含至少一个冒号 :,否则就是普通索引操作。
1、使用正索引
s = "Python"
# 提取前面的字符print(s[0:4]) # Pyth (索引 0 到 3)print(s[:4]) # Pyth (省略 start,默认 0)
# 提取后面的字符print(s[2:]) # thon (省略 end,直到结尾)
# 提取中间的字符print(s[2:4]) # th
2、使用负索引
跟正索引一样,负索引也只是用来定位字符位置,切片的方向仍然是从 start 向 end 推进(步长为正时)。
此时,若 start > end,将返回空串(除非步长为负)。
s = "abcdefg"print(s[-1]) # 输出:gprint(s[-3:-1]) # 输出:ef print(s[-1:-4]) # 输出:''(空串)print(s[-1:-4:-1]) # 输出:gfe
3、使用正步长
步长为正数时,切片从 start 向右推进到 end(不含)。
s = "Python"print(s[1::2]) # yhn (从索引 1 开始,每隔 2 个取一次)
4、使用负步长
步长为负数时,切片从 start 向左推进到 end(不含),从而实现反向切片。
s = "Python"print(s[5:2:-1]) # noh (从索引 5 倒着取到索引 3)
三、字符串切片应用技巧
1、字符串复制与反转
s = "Hello, Python!"print(s[:]) # Hello, Python!print(s[::-1]) # !nohtyP ,olleH
# 应用:判断回文字符串s = "madam"print(s == s[::-1]) # True
2、掩码敏感信息
phone = "13812345678" print(phone[:3] + "****" + phone[-4:]) # 138****5678
3、提取文件的扩展名
filename = "photo.jpg" ext = filename[-3:] print(ext) # jpg
makefile
4、提取奇数/偶数位字符
s = "123456789" print(s[::2]) # 13579print(s[1::2]) # 2468
5、对称截取
s = "[mediaTEA]"print(s[1:-1]) # mediaTEA # 对称截取+反转s = "mediaTEA"print(s[5:8][::-1]) # AET
6、切片与 len() 结合
动态获取字符串部分时,结合 len() 更灵活:
s = "Hello, Python!" print(s[:len(s)//2]) # 前半部分 Hello,print(s[len(s)//2:]) # 后半部分 Python!
python
运行
7、删除或跳过字符
虽然字符串不可变,但可以通过切片和拼接实现“删除”某个位置的字符:
s = "abcdef"
# 删除索引 2 处的字符print(s[:2] + s[3:]) # abdef
# 删除所有偶数索引字符print(s[1::2]) # bdf
8、高级反转技巧
# 按单词反转(结合 split 与切片):
s = "I love Python"
print(" ".join(s.split()[::-1])) # Python love I
# 部分反转:
s = "abcdefgh"
print(s[:4][::-1] + s[4:]) # dcbaefgh
运行
9、列表切片赋值(变通修改字符串)
s = "Python"
lst = list(s)
lst[2:4] = ["X", "Y"]
print("".join(lst)) # PyXYon
四、补充说明
1、切片不会修改原字符串
Python 的字符串是不可变对象,切片会返回一个新的字符串。因此,还可以利用这个新的字符串再次实施切片。
2、越界处理
索引操作:越界会报错。
切片操作:越界时不会报错,而是自动截断。
s = "abc"# print(s[5]) # ❌ IndexErrorprint(s[0:10]) # abc
3、索引和切片不仅适用于字符串,也适用于所有可切片序列,如列表(list)、元组(tuple)、range 对象等。
lst = [1, 2, 3, 4, 5] print(lst[1:4]) # [2, 3, 4]
小结
在 Python 中,索引可用于访问字符串中的单个字符,切片则能灵活提取子串,支持省略参数、负索引、步长以及越界安全等特性。它们不仅适用于字符串,也适用于列表、元组等序列。
熟练掌握索引与切片,能轻松实现复制、反转、截取、删除或掩码等操作,大大提升文本与序列处理的效率。
- 点赞
- 收藏
- 关注作者
评论(0)