Python列表步长为-2的切片结果不符合预期,原因何在?
Python切片结果不符合预期的原因分析
首先明确原数组的索引对应关系:给定数组[43, 90, 115, 500],正、负索引对应如下:
- 正索引:
0→43,1→90,2→115,3→500 - 负索引:
-4→43,-3→90,-2→115,-1→500
切片的核心规则
Python的切片语法为[start:stop:step],核心逻辑是左闭右开:包含start位置的元素,但不包含stop位置的元素;切片方向由step的正负决定:
step>0:从左往右(索引增大方向)取元素step<0:从右往左(索引减小方向)取元素
你的切片为什么只输出[115]
看你写的切片nums[-2:-4:-2]:
- 起始位置是
-2,对应元素115,先加入结果; - 按
step=-2的方向,下一个要取的索引是-2 + (-2) = -4; - 但切片的
stop参数是-4,根据左闭右开规则,不包含索引-4的元素,因此切片在这里停止,最终只得到[115]。
如何得到预期的[115,43]
你需要让切片包含索引-4的元素,有两种写法:
- 将
stop设为比-4更小的索引(比如-5):nums[-2:-5:-2] - 直接省略
stop参数(当step为负时,省略stop会默认取到数组最开头之前的位置):nums[-2::-2]
这两种写法都会得到[115, 43]。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

