使用切片符号反转列表

在下面的例子中:

foo = ['red', 'white', 'blue', 1, 2, 3] 

其中: foo[0:6:1]将打印foo中的所有元素。 但是, foo[6:0:-1]将省略第1或第0个元素。

 >>> foo[6:0:-1] [3, 2, 1, 'blue', 'white'] 

我知道我可以使用foo.reverse()或foo [:: – 1]以反向打印列表,但我想了解为什么foo [6:0:-1]不打印整个列表?

切片符号总之:

 [ <first element to include> : <first element to exclude> : <step> ] 

如果要在列表中反转列表时包含第一个元素,请将中间元素留空,如下所示:

 foo[::-1] 

一般来说,您也可以在这里find关于Python切片的一些很好的信息:
解释Python的切片符号

…为什么foo [6:0:-1]不打印整个列表?

因为中间值是排他性的 ,而不是包含性的,停止价值。 间隔符号是[开始,停止]。

这正是[x]范围的工作原理:

 >>> range(6, 0, -1) [6, 5, 4, 3, 2, 1] 

这些是包含在结果列表中的索引,并且它们不包括第一项的0。

 >>> range(6, -1, -1) [6, 5, 4, 3, 2, 1, 0] 

另一种看待它的方法是:

 >>> L = ['red', 'white', 'blue', 1, 2, 3] >>> L[0:6:1] ['red', 'white', 'blue', 1, 2, 3] >>> len(L) 6 >>> L[5] 3 >>> L[6] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range 

指数6超出(正好是L的有效指数),所以排除在范围外作为排除的停止值:

 >>> range(0, 6, 1) [0, 1, 2, 3, 4, 5] 

仍然给你列表中每个项目的索引。

如果您在记忆切片符号时遇到问题,可以尝试使用Hokey Cokey :

[ 摇一摇 ]

[第一个要素:第一个要素:要使用的步骤 ]

因人而异

这个答案可能有点过时了,但对于那些陷入同样问题的人来说,这可能会有帮助。 你可以得到反向列表,任意结束到0索引,像这样应用第二个就地片:

 >>> L = list(range(10)) >>> L [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> (start_ex, end) = (7, 0) >>> L[end:start_ex][::-1] [6, 5, 4, 3, 2, 1, 0]