简介
大多数的编程语言都支持使用索引来访问数组的元素,像这样:
array = range(10)
print(array[1])
#输出:1
然而在Python中,使用切片(Slice)的操作可以对数组进行更丰富的操作。
用例
1. 负号
大多数的编程语言都只支持正数的索引来访问数组元素,在Python中,还能使用负数来访问:
print(array[-1]) #输出:9
print(array[-2]) #输出:8
从这个结果可以看出,如果索引为负数时,从数组中取元素的顺序是从右向左取的,索引对应元素可以表示为:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
2. 冒号
完整的使用冒号切片的表达式是这样的:
array[ start : end : step ]
start
表示起始的索引(包含),默认值为0
end
表示结束的索引(不包含),默认值为数组总长度
step
步长,默认为1, 不能为0
用例:
print(array[1:]) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9] 从索引1开始,到最后一个元素,步长使用默认值1
print(array[:3]) # 输出:[0, 1, 2] 从索引0开始,到索引2的元素,步长使用默认值1
print(array[::3]) # 输出:[0, 3, 6, 9] 从索引开始,到最后一个元素,步长为3
print(array[4:-13]) # 输出:[] 结束的索引超出范围,返回空数组
print(array[::-1]) # 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 步长为-1,相当于将这个数组倒序排列
print(array[::-2]) # 输出:[9, 7, 5, 3, 1] 步长为-2,从最后一个元素开始,每两个取一次元素
print(array[::0]) # 报错,步长不能为0
print(array[::11]) # 输出:[0] 从索引0开始取元素,加上步长后超过索引范围,只返回一个元素
print(array[::-11]) # 输出:[9] 从索引9开始取元素,减去步长后超过索引范围,只返回一个元素
print(array[:]) # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 相当于复制原数组
总结
使用切片,可以快速灵活的拆分数组,很多需要循环的地方,只用一行代码就搞定了,非常简洁。
参考
廖雪峰Python教程 - 切片
stackoverflow - Understanding Python's slice notation
分析python切片原理和方法