关于python:使用切片表示法反转列表

Reversing a list using slice notation

在下面的例子:

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

在所有的元素:将打印foo[0:6:1]foo。然而,foo[6:0:-1]将omit 0th首届欧元。

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

我的理解是,我可以使用foo.reverse foo()或():1】:反向印刷的列表,但我试图理解为什么::foo的0 - 1 [ 6 ]不是打印整个名单?


Slice notication in short:

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

如果你想包括第一个元素,当你反复列表时,离开中间元素empty,就像这样:

ZZU1

你也可以在这里找到一些关于Python的好信息解释Python的切削标记


如果你有麻烦的记忆,你可以尝试做冰淇淋:

[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:

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

这些是列入你的结果列表的线索,而不包括第一个项目的0。

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

另一种看待它的方式是:

1
2
3
4
5
6
7
8
9
10
11
>>> 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

The index 6 is beyond(one-past,precisely)the valid indices for L,so excluding it from the range as the excluded stop value:

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

还是给你名单上每一个项目的线索。


这个答案可能是一个小问题,但对一个同样麻烦的人来说,它可能是一个帮助。你可以用任意结束的列表到0索引,应用第二个插入点如:

1
2
3
4
5
6
>>> 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]


使用

1
>>>foo[::-1]

This displays the reverse of the list from the end element to the start,