23

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 值。但是我不知道这是如何定义的,搜索让我无处可去。

4

2 回答 2

20

[-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'
于 2013-01-25T07:28:17.410 回答
12

The Python documentation (here's the technical one; the explanation for range() is a bit easier to understand) is more correct than the simplified "every kth element" explanation. The slicing parameters are aptly named

slice[start:stop:step]

so the slice starts at the location defined by start, stops before the location stop is reached, and moves from one position to the next by step items.

于 2013-01-25T07:19:11.377 回答