为什么使用切片法将列表反转时,0作为“停止”不返回整个列表?

103 投票
9 回答
111557 浏览
提问于 2025-04-16 16:56

在下面这个例子中:

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

foo[0:6:1] 会打印出 foo 中的所有元素。不过,foo[6:0:i-1] 会漏掉第一个或第零个元素。

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

我明白我可以用 foo.reverse()foo[::-1] 来反向打印列表,但为什么 foo[6:0:-1] 不会打印出整个列表呢?

9 个回答

10

这个回答可能有点过时,但对遇到同样问题的人来说可能会有帮助。你可以通过一种方法来反转列表,指定一个任意的结束位置——可以到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]
14

如果你在记住切片的写法时遇到困难,可以试试做个Hokey Cokey的动作:

[开始: 结束: 步长]

[第一个要包含的元素: 第一个要排除的元素: 使用的步长]

每个人的理解可能会有所不同

191

切片表示法简单来说就是这样:

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

如果你在反转一个列表的时候想要包含第一个元素,可以把中间的部分留空,像这样:

foo[::-1]

你还可以在这里找到一些关于Python切片的好信息:
解释Python的切片表示法

撰写回答