为什么扩展切片不会反转列表



我正在用python切片列表,无法解释一些结果。以下两种情况对我来说都很自然:

>>>[0,1,2,3,4,5][1:4:1]
[1, 2, 3]
>>>[0,1,2,3,4,5]
[::-1] == [5,4,3,2,1,0]

然而

>>>[0,1,2,3,4,5][1:4:-1]
[]

以为我期望它是[3,2,1]。为什么会产生 [ ]?为什么它不反转列表?在python内部首先发生什么,步骤或切片?

我还发现

>>>[0,1,2,3,4,5][-3:-6:-1]
[3,2,1]

切片中的第三个数字是步数。所以,在[0,1,2,3,4,5][1:4:-1]中,切片从1开始,下降1直到小于4,即立即。尝试这样做:

>>> [0,1,2,3,4,5][4:1:-1]
[4, 3, 2]

如果你正在切片,那么切片将看起来像这样[start:end:step]。对于这个:

>>> [0,1,2,3,4,5][1:4:1]
[1, 2, 3]

它从索引 1 盯着索引 3,因为它一次以 1 步排除索引 4。您在第二个索引中得到一个空列表,因为您正在从第一个索引步进 -1。所以这将是解决方案。

>>> [0,1,2,3,4,5][4:1:-1]
[4, 3, 2]

这是有效的,因为您将索引从 4 变为 1,向前迈出 -1 步。

最新更新