Python列表切片疑问:为何x[::-2]输出与预期不符?
Python切片步长为负的规则解析
为什么x[::-2]输出是[6,4,2]?
不存在所谓的“隐形元素”,这完全是Python切片规则导致的结果。当切片的步长为负数时,切片方向是从右往左遍历:
- 省略
start参数时,默认起始位置是列表最后一个元素的索引(这里列表X的长度为6,最后一个索引是5,对应元素6) - 省略
end参数时,默认结束位置是-1(也就是列表第一个元素索引0的前一个位置,因为切片遵循左闭右开的规则)
所以x[::-2]实际等价于x[5:-1:-2],遍历过程是:从索引5(元素6)开始,每次索引减2,直到索引大于end(-1),依次取到索引5、3、1,对应元素就是6、4、2。
为什么x[0:5:-2]输出空列表?
你对start和end的默认值理解有误——步长的正负会直接影响默认的start和end取值,并非固定取0和最后一个索引:
- 当步长为正时,省略
start默认是0,省略end默认是列表长度(对应最后一个元素的下一个位置) - 当步长为负时,省略
start默认是最后一个索引,省略end默认是-1
而x[0:5:-2]的问题在于:步长为负意味着要从高索引往低索引取,但你设置的start是0(低索引),end是5(高索引),起始位置比结束位置还小,不符合步长为负的遍历方向,因此没有元素被选中,返回空列表。
如果想要得到预期的[5,3,1],可以写成x[4::-2]:从索引4(元素5)开始,往左每次减2,直到列表开头,这样就能取到5、3、1。
内容的提问来源于stack exchange,提问作者mjokar
相关产品推荐
相关产品推荐

