在切片中,为什么我不能反转列表,跳过单个括号中的最后一项?

时间:2015-11-16 01:40:16

标签: python

在Python中,我可以在切片中设置我想要的end

l = [0, 1, 2, 3, 4, 5]
l[:-1] = [0, 1, 2, 3, 4]

我也可以设置我想要的步骤:

l[::-1] = [5, 4, 3, 2, 1, 0]

那么,为什么我不能反转在单次拍摄中跳过最后一项的列表呢?我的意思是为什么会发生这种情况:

l[:-1:-1] = []

为了获得预期的结果,使用切片,我必须这样做:

l[:-1][::-1] = [4, 3, 2, 1, 0]

这是否与字段的优先级有关?切片期间动作发生的顺序?

1 个答案:

答案 0 :(得分:9)

你可以,但你必须这样做:

>>> x[-2::-1]
[4, 3, 2, 1, 0]

原因是当您使用负片时,片的“开始”朝向列表的末尾,并且片的“结束”朝向列表的开头。换句话说,如果你想采用向后切片并且不在列表末尾的元素,那么你想要离开的元素是在切片的开始,而不是结尾,所以你需要指定一个明确的切片开始,让它关闭。

您似乎认为切片符号[a:b:-1]只是意味着“像往常一样采取切片[a:b],然后将其反转”,但这并不意味着什么。请阅读the documentation以获取切片如何工作的完整说明。切片从开始处开始,一直到达步骤直到结束;如果步骤为负,则切片向相反方向移动,产生的结果与向相同方向不同,然后反转。