Python字符串的索引与切片

举报
tea_year 发表于 2025/10/27 14:41:58 2025/10/27
【摘要】 在 Python 中,字符串(str)是最常用的数据类型之一。除了直接存储和打印,字符串还支持通过索引(Indexing)和切片(Slicing)来快速访问、提取或组合子串。理解这两个操作,是掌握 Python 字符串处理的关键。在 Python 中, [] 是专门用于下标和切片的运算符(不同于 C 语言中的数组)。一、字符串的索引(Indexing)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 中,索引可用于访问字符串中的单个字符,切片则能灵活提取子串,支持省略参数、负索引、步长以及越界安全等特性。它们不仅适用于字符串,也适用于列表、元组等序列。

熟练掌握索引与切片,能轻松实现复制、反转、截取、删除或掩码等操作,大大提升文本与序列处理的效率。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。