如何理解具有负k索引的python切片?

如何理解具有负k索引的python切片?,python,Python,有人能解释一下为什么a[:5:-1]!=a[:5][::-1] >>> a = range(10) >>> a[:5][::-1] [4, 3, 2, 1, 0] >>> a[:5:-1] [9, 8, 7, 6] a[:5][::-1]所说的是,程序应该首先获取元素,直到数据集的第5个元素,然后将它们反转(从最后一个元素开始获取每个元素) 与此相反,a[:5:-1]说,您应该从最后一个元素开始获取元素,直到第五个元素(从最后一个元素开始获

有人能解释一下为什么
a[:5:-1]!=a[:5][::-1]

>>> a = range(10)
>>> a[:5][::-1]
[4, 3, 2, 1, 0]
>>> a[:5:-1]
[9, 8, 7, 6]

a[:5][::-1]
所说的是,程序应该首先获取元素,直到数据集的第5个元素,然后将它们反转(从最后一个元素开始获取每个元素)


与此相反,
a[:5:-1]
说,您应该从最后一个元素开始获取元素,直到第五个元素(从最后一个元素开始获取每个元素)

a[:5]返回一个数组,索引为0到4,然后作为第二个操作对其进行负索引。a[:5:-1]对原始数组进行负索引。

slicings的一般语法为

a[start:stop:step]
您可以省略三个值中的任何一个
开始
停止
,或
步骤
。如果省略
步骤
,它将始终默认为
1
。相比之下,
start
stop
的默认值取决于
step
的符号:如果
step
为正,
start
默认为
0
stop
默认为
len(a)
。如果
step
为负值,
start
默认为
len(a)-1
stop
默认为“列表的开头”

所以这里的
a[:5:-1]
a[9:5:-1]
相同

a[:5][::-1]
a[0:5][4::-1]
相同


(请注意,如果
步骤
为负数,则不可能明确给出
停止
的默认值。停止值不包含在内,因此
0
将不同于“列表的开头”。使用
None
将等同于根本不给出任何值。)

类似于::操作。只是猜测而已