python中的扩展切片语法已经向我解释为“a[n:m:k] returns every kth element from n to m
”。
这让我很清楚当k为正时会发生什么。但我迷失在如何解释a[n:m:k]
为负k。我知道a[::-1]
会反转a,而a[::-k]
会占用逆转a的第k个元素。
但这对k正定义的概括如何?我想知道a[n:m:k]
是如何实际定义的,所以(例如)我可以理解为什么:
"abcd"[-1:0:-1] = "dcb"
a[n:m:-k]
是否正在反转序列a,然后从n开始并在m之前结束一个原始索引的元素?我不这么认为,因为这种模式不适合我尝试过的其他n和m值。但是我无法弄清楚这是如何实际定义的,而且搜索让我无处可去。
答案 0 :(得分:13)
[-1:0:-1]
表示:从索引len(string)-1
开始,向上移动到0
(不包括在内),然后迈出-1
(反向)步骤。
因此,提取了以下索引:
le-1, le-1-1, le-1-1-1 .... 1 # le is len(string)
示例:
In [24]: strs = 'foobar'
In [25]: le = len(strs)
In [26]: strs[-1:0:-1] # the first -1 is equivalent to len(strs)-1
Out[26]: 'raboo'
In [27]: strs[le-1:0:-1]
Out[27]: 'raboo'
答案 1 :(得分:9)
Python文档(here's the technical one; range()
的解释更容易理解)比简化的“每个第k个元素”解释更正确。切片参数恰当地命名为
slice[start:stop:step]
所以切片从start
定义的位置开始,在到达位置stop
之前停止,并通过step
项从一个位置移动到下一个位置。