在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]
这是否与字段的优先级有关?切片期间动作发生的顺序?
答案 0 :(得分:9)
你可以,但你必须这样做:
>>> x[-2::-1]
[4, 3, 2, 1, 0]
原因是当您使用负片时,片的“开始”朝向列表的末尾,并且片的“结束”朝向列表的开头。换句话说,如果你想采用向后切片并且不在列表末尾的元素,那么你想要离开的元素是在切片的开始,而不是结尾,所以你需要指定一个明确的切片开始,让它关闭。
您似乎认为切片符号[a:b:-1]
只是意味着“像往常一样采取切片[a:b]
,然后将其反转”,但这并不意味着什么。请阅读the documentation以获取切片如何工作的完整说明。切片从开始处开始,一直到达步骤直到结束;如果步骤为负,则切片向相反方向移动,产生的结果与向相同方向不同,然后反转。