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

时间:2012-03-28 17:50:17

标签: 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]

3 个答案:

答案 0 :(得分:12)

切片的一般语法是

a[start:stop:step]

您可以省略startstopstep这三个值中的任何一个。如果省略step,则默认为1。相比之下,startstop的默认值取决于step的符号:如果step为正,则start默认为0 }和stoplen(a)。如果step为否定,start默认为len(a) - 1stop为“开头”。

所以a[:5:-1]与此处的a[9:5:-1]相同,

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

(请注意,如果stop为否定,则无法明确提供step的默认值。停止值为非包含性,因此0与“开头”不同列表“。使用None相当于根本不提供任何价值。”

答案 1 :(得分:1)

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

与此相反,a[:5:-1]表示你应该使用元素直到第5个元素从最后一个元素开始(从最后一个元素开始每个元素)。

答案 2 :(得分:0)

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