为什么 [0,1,2,3,4][-5:0:1] 会得到空列表 []?这似乎不是一个一致的模式

编程语言 2026-07-11

请看下面的代码。我认为最后一个打破了模式。为什么它会输出 [] 而不是 [0,1,2,3,4]

# backward
print("BACKWARD")
print([0,1,2,3,4][-1:-2:-1])
print([0,1,2,3,4][-1:-3:-1])
print([0,1,2,3,4][-1:-4:-1])
print([0,1,2,3,4][-1:-5:-1])
print([0,1,2,3,4][-1:-6:-1])
# forward
print("FORWARD")
print([0,1,2,3,4][-5:-4:1])
print([0,1,2,3,4][-5:-3:1])
print([0,1,2,3,4][-5:-2:1])
print([0,1,2,3,4][-5:-1:1])
print([0,1,2,3,4][-5:0:1]) # why is it empty? It breaks the pattern!

[0,1,2,3,4][-1:-6:-1] 中,我们被允许仅把 stop 扩展到 -6 以保持模式的一致性。

不幸的是,在这里把 stop 扩展到 0 是不被允许的。对我来说,这似乎不一致。

BACKWARD
[4]
[4, 3]
[4, 3, 2]
[4, 3, 2, 1]
[4, 3, 2, 1, 0]
FORWARD
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[]

让我如下来说明我的理解: 在此处输入图片描述

解决方案

使用Python的切片运算符 [] 的工作方式如下 [start:stop:step],因此对于第 [0,1,2,3,4][-5:0:1] 行,它以索引 -5 作为起点(对于一个长度为5 的列表来说,起点是 0),在索引 0 处结束,然后再向前移动1 个索引;但由于你是从 0 开始,到 0 结束,因此它确实返回一个空结果,因为切片的部分并不包含任何内容。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章