使用切片符号反转列表
在下面的例子中:
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]