在下面的例子:

foo = ['red', 'white', 'blue', 1, 2, 3]
在所有的元素:将打印foo[0:6:1]foo。然而,foo[6:0:-1]将omit 0th首届欧元。
>>> foo[6:0:-1]
[3, 2, 1, 'blue', 'white']
我的理解是,我可以使用foo.reverse foo()或():1】:反向印刷的列表,但我试图理解为什么::foo的0 - 1 [ 6 ]不是打印整个名单?
还要注意foo[7:None:-1]的可能性:)
在试图理解切片符号之前,我从来没有使用过python,我的问题是为什么foo[6:0:-1]没有抛出索引错误,python不关心它吗?因为上面的示例数组中没有6个索引。
@Mubasharahmad切片不是索引,并且在超出界限时不会抛出任何错误。不过,索引在超出界限时确实会引发异常。
Slice notication in short:
[ : : ]
如果你想包括第一个元素,当你反复列表时,离开中间元素empty,就像这样:
ZZU1
你也可以在这里找到一些关于Python的好信息解释Python的切削标记
这:[ : : ]是我见过的最清晰的切片语法解释。称之为"要排除的第一个元素"确实使事情变得很明显。
用负的步骤进行负的切片怎么样?我还是不明白。
当使用负索引作为或时,它是从列表的后面进行索引的,因此-1是最后一个元素,-2是第二个到最后一个元素,等等。例如,x[-1:-4:-1]将按相反的顺序得到x的最后三个元素。因此,您可以将其解释为"从列表中的最后一个元素(-1)向后移动每个元素(-1步),直到但不包括从末尾开始的第四个元素(-4)。
倒车时(如为-1时),我认为有帮助。所以,要从一个列表中按相反的顺序得到n个"最左边"的元素:foo[n-1::-1]。以相反的顺序获得n的"最右边"元素:foo[-1:-n-1:-1]。
如果你有麻烦的记忆,你可以尝试做冰淇淋:
[In:out:shake it all about]
[First element to include:first element to leave out:the step to use]
YMV
...why foo[6:0:-1] doesn't print the entire list?
因为中值是唯一的,比包容性强,停止值。The interval notication is[start,stop.]
This is exactly how[x]range works:
>>> 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"", line 1, in 
IndexError: list index out of range
The index 6 is beyond(one-past,precisely)the valid indices for L,so excluding it from the range as the excluded stop value:
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
还是给你名单上每一个项目的线索。
range可以,但Slice不能,因为-1是最后一个元素。因此,l=[1, 2, 3]和l[2:-1:-1] == []。
这个答案可能是一个小问题,但对一个同样麻烦的人来说,它可能是一个帮助。你可以用任意结束的列表到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]
这实际上非常有用,因为您可以对所有情况使用相同的语法。您不必将0视为特殊情况。
使用
>>>foo[::-1]
This displays the reverse of the list from the end element to the start,