单独指定步长step时Python列表切片的工作原理是什么?
Python切片步长工作逻辑讲解
Python序列的切片完整语法为 序列[start:end:step],三个参数均可省略,仅指定步长时会使用start和end的默认值,步长的正负直接决定了切片的遍历方向。
步长的核心规则
- 当
step > 0时,切片从左到右遍历序列- start默认值为
0(序列第一个元素的索引) - end默认值为
len(序列)(序列最后一个元素的索引+1) - 遍历过程中依次取索引满足
start ≤ 索引 < end、间隔为step的元素,超出范围即停止
- start默认值为
- 当
step < 0时,切片从右到左遍历序列- start默认值为
len(序列)-1(序列最后一个元素的索引) - end默认值为
-len(序列)-1(序列第一个元素索引的左侧边界,确保能取到第一个元素) - 遍历过程中依次取索引满足
start ≥ 索引 > end、间隔为step绝对值的元素,超出范围即停止
- start默认值为
示例代码执行拆解
你的测试列表为:
lst = [50,34,98,8,10]
链式切片lst[::][::-1][::-1][::-1][::-1]的每一步执行结果如下:
lst[::]:start、end、step均省略,step默认取1,返回原列表的浅拷贝,结果为[50,34,98,8,10]- 第一次
[::-1]:step为-1,将当前列表倒序,结果为[10,8,98,34,50] - 第二次
[::-1]:再次倒序,结果回到[50,34,98,8,10] - 第三次
[::-1]:倒序,结果为[10,8,98,34,50] - 第四次
[::-1]:再次倒序,结果回到[50,34,98,8,10]
连续4次倒序属于偶数次倒序,最终结果和原列表完全一致。
常见效果验证
以lst为例,不同步长的切片效果:
lst[::2]:步长为2,从左到右取索引0、2、4的元素,结果为[50, 98, 10]lst[::-2]:步长为-2,从右到左取索引4、2、0的元素,结果为[10, 98, 50]lst[3::-1]:步长为-1,从索引3开始向左遍历,取索引3、2、1、0的元素,结果为[8, 98, 34, 50]
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

