Python中切片[::-1]为何与[-1::-1]运行效果相同?
为什么Python切片
[::-1]和[-1::-1]运行效果完全一致 很多Python入门资料对切片语法[start:stop:step]的参数默认值解释存在偏差,笼统声称start参数默认值为0,这一结论只在步长为正的场景下成立。切片参数的默认值是随步长方向动态变化的,核心规则如下:
- 当
step为正数(正向遍历序列)时:start默认值为序列起始索引0stop默认值为序列长度(即遍历到最后一个元素的后一位停止,刚好覆盖所有正向元素)
- 当
step为负数(反向遍历序列)时:start默认值为序列末尾索引-1stop默认值为- (len(序列) + 1)(即遍历到第一个元素的前一位停止,刚好覆盖所有反向元素)
理解这个规则就能直接解释两个写法效果一致的原因:[::-1]省略了start和stop参数,步长为-1属于反向遍历,此时start的默认值就是-1,和手动写[-1::-1]指定的start参数完全相同,两者的stop都使用负步长下的默认值,遍历逻辑完全一致,输出结果自然相同。
我们可以结合测试代码验证这个逻辑:
lst = ['c', 'a', 't'] print(lst[0::-1]) print(lst[::-1]) print(lst[-1::-1])
运行输出:
['c'] ['t', 'a', 'c'] ['t', 'a', 'c']
逐行解析运行逻辑:
lst[0::-1]:手动指定start=0,步长为-1反向遍历,stop使用负步长默认值。从索引0对应的元素'c'开始反向取值,索引0前面没有其他元素,最终输出['c']lst[::-1]:步长为-1,start取默认值-1(对应元素't'),stop取负步长默认值,从末尾反向遍历到序列开头,输出['t', 'a', 'c']lst[-1::-1]:手动指定start=-1,和负步长下的start默认值完全一致,遍历逻辑和[::-1]完全相同,输出同样为['t', 'a', 'c']
内容的提问来源于stack exchange,提问作者filler36
相关产品推荐
相关产品推荐

