【发布时间】:2017-05-16 19:04:02
【问题描述】:
我以为我了解了python中列表切片的基础知识,但是在切片上使用负步骤时收到了意外错误,如下所示:
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:-1:-1]
[]
(请注意,这是在 Python 3.5 中运行的)
为什么 a[:-1:-1] 不以与使用 a[::-1] 遍历整个列表相同的方式反向遍历 a[:-1] 切片?
我意识到您也可以使用 list.reverse(),但要更好地理解底层的 python 切片功能。
【问题讨论】:
-
我认为您正在寻找
a[-1::-1]。第一个索引给出开始,第二个索引给出结束,你想从索引 -1 开始。 -
@ekhumoro:我做到了,而且有效。
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] -
@Josh。这与
a[::-1]有何不同? -
@ekhumoro:好点,
a[-2::-1](产生[8, 7, 6, 5, 4, 3, 2, 1, 0])实际上可能是答案,因为包含了起始索引。 -
@Josh,你说得对,
a[-2::-1]是我一直在寻找的解决方案,但直到下面讨论该步骤的 +/- 符号如何影响末端的行为。