1. 基本切片语法
string[start:stop:step]
start
:起始索引(包含),省略时默认为0stop
:结束索引(不包含),省略时默认为字符串末尾step
:步长(正数从左到右,负数从右到左),省略时默认为1
2. 反转字符串 n[::-1]
2.1 语法解析
n = "Python"
reversed_n = n[::-1] # 'nohtyP'
start
和stop
都省略 → 处理整个字符串step = -1
→ 从右向左逐步取值
2.2 等效写法
n = "Python"
reversed_n = n[-1::-1] # 明确从最后一个字符开始
reversed_n = n[None:None:-1] # 显式使用None表示默认值
3. 切片步长详解
步长 | 方向 | 效果 | 示例 |
---|---|---|---|
1 | 正向 | 从左到右顺序选取 | n[::1] → “Python” |
2 | 正向 | 隔一个取一个 | n[::2] → “Pto” |
-1 | 反向 | 反转字符串 | n[::-1] → “nohtyP” |
-2 | 反向 | 反向隔一个取一个 | n[::-2] → “nhy” |
4.1 判断回文字符串
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("madam")) # True
print(is_palindrome("hello")) # False
4.2 获取字符串最后N个字符
n = "Hello World"
last_3 = n[-3:] # 正序获取最后3个字符: 'rld'
last_3_rev = n[:-4:-1] # 逆序获取最后3个字符: 'dlr'
4.3 交替反转字符串
s = "abcdef"
print(s[::2][::-1] + s[1::2][::-1]) # 'fdbeca'
ps:s[1::2] → 获取奇数索引(从1开始,步长2)的字符:
4. 实际应用示例
5. 注意事项
-
索引越界时不会报错,会自动处理为有效范围
"Python"[100:] # 返回空字符串 ''
-
字符串切片创建的是新对象(字符串不可变)
-
同样适用于列表和其他序列类型
[1, 2, 3][::-1] # 返回 [3, 2, 1]
-
性能考虑:对于大数据量,
[::-1]
比''.join(reversed(s))
稍快