Python 中如何截取字符串的子串?
Python 截取子串用切片语法 s[start:end],支持负索引和步长。本文介绍切片的各种用法、常见示例及注意事项。
用切片语法 s[start:end]:start 是起始下标(含),end 是结束下标(不含)。省略 start 从头开始,省略 end 到结尾。
基本用法
s = "Hello, world!"
print(s[7:12]) # "world"
print(s[:5]) # "Hello"(从头到第 5 个)
print(s[7:]) # "world!"(从第 7 个到尾)
print(s[-6:-1]) # "world"(负索引:倒数第 6 到倒数第 2)
步长参数
s = "abcdefg"
print(s[::2]) # "aceg"(每隔一个取一个)
print(s[::-1]) # "gfedcba"(倒序)
切片的友好特性
- 越界不报错:
s[0:100]不会抛异常,自动截到末尾; - 切片返回新字符串,原字符串不变(字符串不可变)。
常见需求速查
| 需求 | 写法 |
|---|---|
| 前 N 个字符 | s[:N] |
| 后 N 个字符 | s[-N:] |
| 去掉首尾各 1 个 | s[1:-1] |
| 字符串反转 | s[::-1] |
常见问题(FAQ)
Q:按分隔符截取怎么办?
A:用 split() 分割后取值,如 s.split(',')[0];或用 find() 定位再切片:s[:s.find(',')]。
Q:下标从 0 还是 1 开始?
A:从 0 开始。s[0] 是第一个字符。
Q:切片和 split 哪个快?
A:简单截取切片更快;需要按分隔符拆多段时 split 更合适。日常代码性能差异可忽略,优先选可读性好的写法。