Python中的分片
Python中使用索引来访问序列中的某一个元素,如果要访问序列中某一定范围内的元素,可以使用分片来完成。
分片操作是通过由冒号相隔的两个索引号来实现的:sequence[indexStart : indexEnd]
例如:
>>> numbers = [5, 1, -2, 67, 10, 23, 100]
>>> numbers[2 : 4]
[-2, 67]
>>> numbers[2: -3]
[-2, 67]
也可以加上步长,例如
>>> numbers[0:6:2]
[5, -2, 10]
分片操作可以表示为:
sequence[indexStart : indexEnd : stride]
按步长stride从序列sequence中取出从indexStart开始到indexEnd终止范围内的元素组成一个新的序列
indexStart: 起始索引号,它的值可以是正的也可以是负的,它所对应的元素会加入到新的序列中;该索引号指的是原始序列中的索引号,而不是新序列中的索引号
indexEnd: 终止索引号,它的值可以是正的也可以是负的,它所对应的元素不会加入到新的序列中;该索引号指的是原始序列中的索引号,而不是新序列中的索引号
stride: 步长,它的值可以是正的也可以是负的,可以省略,省略时使用默认步长,默认步长为正1
indexStart 可以省略,省略时,若stride为正的,则表示序列的首个元素;若stride为负的,则表示序列的最后一个元素
indexEnd 也可以省略,省略时,若stride为正的,则表示序列的最后一个元素;若stride为负的,则表示序列的首个元素
分片操作其实就是按照一定的顺序访问序列中某一范围内的元素,记住一点就行了,那就是在一定的访问顺序中,indexStart所对应的元素必须先于indexEnd所对应的元素被访问到,否则,分片操作返回的就是空的序列;
具体来说,就是先看访问顺序,其实就是先看步长,因访问顺序是由步长来决定的,
当步长为正时:按从原始序列sequence的头部(从左)到尾部(到右)的顺序访问序列中的元素,indexStart在原始序列sequence中所对应的元素必须出现在indexEnd所对应的元素的左边
当步长为负时:按从原始序列sequence的尾部(从右)到头部(到左)的顺序访问序列中的元素,indexStart在原始序列sequence中所对应的元素必须出现在indexEnd所对应的元素的右边
例如:
>>> numbers = [5, 1, -2, 67, 10, 23, 100]
>>> numbers[5:3]
[]
>>> numbers[5:3:-1]
[23, 10]
>>>numbers[0:5:2]
[5,-2, 10]
>>> numbers[3:3]
[]
>>>numbers[3:3:-1]
[]
>>> numbers[-2:4:-1]
[23]
>>> numbers[ : 4 : -1]
[100, 23]
>>> numbers[-2 : 5 : -1]
[]
>>> numbers[-2 : : -1]
[23,10, 67, -2, 1, 5]
>>> numbers[: : -1]
[100,23, 10, 67, -2, 1, 5]