Python列表切片操作lst[:5:-2]输出为空而非预期10的问题咨询
Python列表负步长切片返回空的原因
你使用的示例列表如下:
lst = [50, 34, 98, 8, 10]
各元素对应的索引映射为:
- 50:正索引
0/ 负索引-5 - 34:正索引
1/ 负索引-4 - 98:正索引
2/ 负索引-3 - 8:正索引
3/ 负索引-2 - 10:正索引
4/ 负索引-1
核心原因
Python切片遵循两个核心规则,之前的理解刚好忽略了这两点:
- 切片的终止索引是不包含的,只要起始索引和终止索引位置重合,就会直接返回空列表
- 步长为负时,遍历方向是从右往左,只有起始索引的位置在终止索引的右侧时,才会遍历返回元素,否则直接返回空
针对lst[:5:-2]的拆解分析
- 步长为
-2,省略起始索引时,默认起始索引为列表最后一个元素的位置,即负索引-1/正索引4,对应值10,这部分理解是正确的 - 填写的终止索引为
5,这个索引值已经超出了列表的最大正索引4,对应位置在列表最末尾的右侧 - 遍历方向为向左,当前的起始位置(正索引
4)本身就在终止位置(正索引5)的左侧,向左遍历永远不可能到达更靠右的终止位置,因此切片直接返回空列表
预期输出[10]的实现方式
如果要取到[10],把终止索引设置在起始索引的左侧即可,示例如下:
print(lst[-1:3:-2]) # 输出:[10]
这个写法里终止索引是正索引3(对应值8),起始位置4在3的右侧,向左遍历第一个元素就是4对应的10,再走步长-2就到了2,已经越过终止位置3,因此只返回[10]。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

