📚 Python切片操作全解析:从一维到高维的魔法切割术 ✂️
一、一维切片操作(列表/字符串)
1️⃣ [-1]
👉 取最后一个元素,Python的负索引魔法
python
X = [1,2,3,4,5]
print(X[-1]) # 输出:52️⃣ [:-1]
👉 排除最后一个元素,相当于"掐头去尾"
python
X = [1,2,3,4,5]
print(X[:-1]) # 输出:[1,2,3,4]3️⃣ [::-1]
👉 逆序整个序列,镜像反转魔法
python
X = [1,2,3,4,5]
print(X[::-1]) # 输出:[5,4,3,2,1]4️⃣ [n::-1]
👉 从索引n开始逆序到开头
python
X = [1,2,3,4,5]
print(X[3::-1]) # 输出:[4,3,2,1]二、多维切片操作(适用于NumPy等库)
5️⃣ [:, :, 0]
👉 三维数组操作:前两维全选,第三维取索引0
python
import numpy as np
arr = np.arange(24).reshape(2,3,4)
print(arr[:, :, 0])
# 输出:前两维全选,第三维取第0层的所有数据6️⃣ [..., 0]
👉 省略号魔法:自动填充所有前置维度,最后一维取索引0
python
arr = np.arange(24).reshape(2,3,4)
print(arr[..., 0]) # 等效于 arr[:, :, 0]7️⃣ [..., ::-1]
👉 省略号+逆序:保持其他维度不变,最后一维逆序
python
arr = np.arange(24).reshape(2,3,4)
print(arr[..., ::-1]) # 每个二维切片最后一维逆序三、切片原理速记表 🧠
| 切片模式 | 等价操作 | 行为描述 | 应用场景 |
|---|---|---|---|
| [start:] | [start:len(seq):1] | 从起点到末尾 | 截取后半段 |
| [:end] | [0🔚1] | 从头到终点前一位 | 截取前半段 |
| [::2] | [0:len(seq):2] | 隔一个取一个 | 取偶数位元素 |
| [::-1] | [len(seq)-1👎-1] | 逆序整个序列 | 数据反转 |
| [3::-1] | [3:-len(seq)-1:-1] | 从第3个元素倒序到开头 | 局部逆序提取 |
| [...,0] | 自动填充前置维度 | 高维数据最后一维操作 | 多维数组切片 |
四、切片冷知识 ❄️
- 负索引计算:
X[-n]=X[len(X)-n][2][4] - 缺省值逻辑:步长为正时,start默认0,end默认末尾;步长为负时,start默认末尾,end默认开头 [3][7]
- 内存共享特性:切片生成的是原数据的视图(浅拷贝),修改切片会影响原数据 [4][7]
python
a = [1,2,3,4]
b = a[1:3]
b[0] = 99
print(a) # 输出:[1,99,3,4] 😱五、高维切片实战 🌌
python
# 四维时空数据切片示例(假设为时间×高度×纬度×经度)
weather_data = np.random.rand(365, 10, 180, 360)
# 取第0天所有高度层的北纬30度数据
slice1 = weather_data[0, :, 150, :]
# 取所有时间的500hPa高度场逆序经度
slice2 = weather_data[:, 5, :, ::-1]
# 取最后一天地表温度的第0个变量
slice3 = weather_data[-1, 0, ..., 0]💡 学习建议:
- 用
dir()查看对象的__getitem__方法理解切片原理 [4] - 在IPython中用
X??查看切片实现的C源码(进阶向) - 掌握NumPy的
np.s_工具生成复杂切片 [6]
