我是Python的新手并且已经阅读了几个有关切片的教程,但是我在空闲中运行的示例似乎没有返回我期望的内容。例如,我已将以下列表分配给变量a
a=[0,1,2,3,4,5,6,7,8,9]
现在我理解切片为[number I want to include:number up to and don't want to include:step]
因此,如果我a[1]
,我会期待1
。如果我a[1:3]
,则为1,2
现在,如果我a[-1]
,我会9
但是如果我a[-1:-5]
,我什么也得不到。我所看到的只是[]
。这是为什么?我希望看到9,8,7,6
我在Windows 7 Professional上运行Python 2.7
答案 0 :(得分:2)
在这种情况下,您需要添加step
参数才能获得所需内容:
In [1]: a=[0,1,2,3,4,5,6,7,8,9]
In [2]: a[-1:-5:-1]
Out[2]: [9, 8, 7, 6]
如果你想节省更多的空间,你可以省略第一个参数:
In [3]: a[:-5:-1]
Out[3]: [9, 8, 7, 6]
Python处理“否定”切片的方式是将对象的len
添加到负数。所以当你说a[-1:-5]
时,它基本上是a[(-1+10):(-5+10)]
,等于a[9:5]
,而且start
/ end
指的是两者之间的所有字符(通过列表“向前”移动,它不会返回任何内容(因此您的空白列表)。您可以通过执行以下操作来查看此内容:
In [5]: a[-5:9]
Out[5]: [5, 6, 7, 8]
In [6]: a[5:9]
Out[6]: [5, 6, 7, 8]
从-5 + 10 = 5
开始,您会得到与负和正指数相同的结果。
提供-1 step
参数告诉它从第一个元素开始,但从开始位置向后移动。
答案 1 :(得分:2)
我认为将拼接视为不是数字本身,而是指向指数的指针是很好的。
+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
0 1 2 3 4 5 6 7 8 9
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1
因此,当您切片a[-1:-5]
时,您将从索引9开始,然后转到索引5.在该切片中没有任何内容。如果你a[-5:-1]
,那么你将从索引5开始到索引9。
RocketDonkey是对的 - 如果你想要[9, 8, 7, 6]
,你需要倒退。