Python 中的切片(Slicing)操作是一种高效且灵活的数据访问方式,主要用于序列类型(如列表、字符串、元组等)。它允许通过指定起始、结束和步长来截取序列的子集。其基本语法如下所示:
sequence[start:stop:step]
- start:起始索引(包含),默认为
0
。 - stop:结束索引(不包含),默认为序列长度。
- step:步长(可选),默认为
1
,值表示步长;正负表示方向
一、特性
(1) 索引规则
- 正向索引:从
0
开始,左到右。 - 负向索引:从
-1
开始(倒数第一个),右到左。
(2) 默认值
- 省略
start
:从序列开头开始(0
)。 - 省略
stop
:截取到序列末尾(包括最后一个元素)。 - 省略
step
:默认为1
(连续截取)。
(3) 步长(step)
- 正步长:从左到右截取。
- 负步长:从右到左截取(可实现逆序)。
二、常见操作示例
(1) 基本截取
s = [0, 1, 2, 3, 4, 5]
print(s[1:4]) # [1, 2, 3](包含1,不包含4)
print(s[:3]) # [0, 1, 2](从开头到索引2)
print(s[3:]) # [3, 4, 5](从索引3到末尾)
(2) 负索引
print(s[-3:]) # [3, 4, 5](倒数第3个到末尾)
print(s[:-2]) # [0, 1, 2, 3](开头到倒数第3个)
(3) 步长应用
print(s[::2]) # [0, 2, 4](每隔1个取1个)
print(s[::-1]) # [5, 4, 3, 2, 1, 0](逆序)
print(s[1:5:2]) # [1, 3](从1到4,步长2)
(4) 字符串切片
text = "Python"
print(text[1:4]) # "yth"
print(text[::-1]) # "nohtyP"
三、注意事项
-
越界安全:切片索引超出范围时自动截断,不会报错。
s = [1, 2, 3] print(s[0:10]) # [1, 2, 3](自动限制到有效范围)
-
浅拷贝:切片返回的是新对象,但对可变序列的修改可能影响原数据(如嵌套列表)。
-
不可变序列:字符串、元组的切片会生成新对象,原对象不可变。
四、 高级技巧
(1) 赋值与修改
s = [0, 1, 2, 3]
s[1:3] = [10, 20] # 替换子序列 → [0, 10, 20, 3]
s[::2] = [100, 200] # 按步长赋值 → [100, 10, 200, 3]
(2) 删除元素
s = [0, 1, 2, 3]
s[1:3] = [] # 删除索引1-2 → [0, 3]
五、总结
操作 | 示例 | 效果 |
---|---|---|
基本切片 | s[1:4] |
截取索引1到3的子序列 |
逆序 | s[::-1] |
反转序列 |
步长截取 | s[::2] |
每隔1个元素取1个 |
负索引 | s[-3:] |
截取最后3个元素 |
赋值与修改 | s[1:3]=[10,20] |
替换指定范围的元素 |
注:以上内容由LLM生成
注意:本文归作者所有,未经作者允许,不得转载