Python列表首尾区间反向切片及index jump参数作用疑问
Python列表切片规则原理解释
首先明确Python切片的通用语法为 [start:end:step],三个参数的默认规则如下:
- 省略
start时,默认值由step决定:step为正默认是列表首索引,step为负默认是列表尾索引 - 省略
end时,默认值由step决定:step为正默认是列表尾后索引,step为负默认是列表首前索引 - 省略
step时,默认值为1,代表从左到右正向遍历
切片返回非空结果的核心前提:遍历方向和起止索引的位置关系匹配
- 步长为正(正向遍历):
start的位置必须在end的左侧,否则返回空列表 - 步长为负(反向遍历):
start的位置必须在end的右侧,否则返回空列表
对应代码示例拆解
测试列表为 l = [1, 2, 3, 4, 5, 6, 7],对应的索引映射关系如下:
| 正索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 元素 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 负索引 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
你用到的5对应正索引5(元素6),-7对应正索引0(元素1)。
1. 带步长参数的切片 l[5:-7:-1]
step值为-1,代表从右到左反向遍历start是索引5,end是索引0,符合「反向遍历要求start在end右侧(5>0)」的规则- 切片会从
start位置开始,每次索引减1,直到到达但不包含end位置,依次取索引5、4、3、2、1对应的元素,最终得到结果[6,5,4,3,2]
2. 无步长参数的切片 l[5:-7]
- 省略
step,默认值为1,代表从左到右正向遍历 start是索引5,end是索引0,不符合「正向遍历要求start在end左侧」的规则,从索引5开始向右遍历永远无法到达比它更小的索引0,因此返回空列表[]
内容的提问来源于stack exchange,提问作者Saisiva A
相关产品推荐
相关产品推荐

