有人可以解释为什么a[:5:-1] != a[:5][::-1]
?
>>> a = range(10)
>>> a[:5][::-1]
[4, 3, 2, 1, 0]
>>> a[:5:-1]
[9, 8, 7, 6]
答案 0 :(得分:12)
切片的一般语法是
a[start:stop:step]
您可以省略start
,stop
或step
这三个值中的任何一个。如果省略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]
相同。
(请注意,如果stop
为否定,则无法明确提供step
的默认值。停止值为非包含性,因此0
与“开头”不同列表“。使用None
相当于根本不提供任何价值。”
答案 1 :(得分:1)
a[:5][::-1]
所说的是程序首先应该将元素带到数据集的第5个元素,然后反转它们(从最后一个元素开始每个元素)。
与此相反,a[:5:-1]
表示你应该使用元素直到第5个元素从最后一个元素开始(从最后一个元素开始每个元素)。
答案 2 :(得分:0)
a [:5]返回一个数组,索引0到4,然后你将其作为第二个操作进行负索引。 a [:5:-1]对原始数组进行负索引。