Python学习笔记 - 切片Slice

简介


大多数的编程语言都支持使用索引来访问数组的元素,像这样:

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切片原理和方法

你可能感兴趣的:(Python学习笔记 - 切片Slice)