关于Python';s切片表示法

关于Python';s切片表示法,python,slice,Python,Slice,这行代码 print [0, 1, 2, 3, 4][0:1:1] 返回[0] 但是,以下代码行: print [0, 1, 2, 3, 4][0:0:1] 返回[] 为什么会这样?基于此,我的理解是格式应为: a[start:end:step] # start through not past end, by step 所以不应该[0,1,2,3,4][0:0:1]以第0个值开始和结束,从而返回[0]?请注意,这是[0:0:1]而不是[0:1:1] 因此: 切片[start:end:st

这行代码

print [0, 1, 2, 3, 4][0:1:1]
返回
[0]

但是,以下代码行:

print [0, 1, 2, 3, 4][0:0:1]
返回
[]

为什么会这样?基于此,我的理解是格式应为:

a[start:end:step] # start through not past end, by step

所以不应该
[0,1,2,3,4][0:0:1]
以第0个值开始和结束,从而返回
[0]

请注意,这是
[0:0:1]
而不是
[0:1:1]

因此:

切片
[start:end:step]
意味着它将返回在
开始
结束-1
之间的值,并带有特定的
步骤
,因此对于您的示例:

...[0:0:1]

值介于0和-1之间,因此它不会返回任何内容。

切片的“结束”索引始终从结果中排除;i、 例如,
listy[start:end]
返回所有
listy[i]
其中
startPython切片表示法中的结束索引是独占的。
[n:m]
的一个片段将返回索引为>=n和 要稍微简化一些,请尝试不使用步骤(当步骤值为1时不需要步骤):

作为一般规则,切片中的元素数等于切片的开始索引减去切片的结束索引。即,切片
[n:m]
将返回m-n个元素。这与
[0:1]
返回的一个元素(1-0)和
[0:0]
返回的零个元素(0-0)一致

(请注意,如果任何一个切片索引超出数组大小,则情况并非如此。)


为了更好地可视化切片索引的工作方式,在

未结束时搜索“记住切片工作方式的一种方法”是不正确的-
直到(但不包括)结束时
是正确的。Python切片在
开始
结束时是包含的,但在
结束时是独占的。
...[0:0:1]
>>> a = [0, 1, 2, 3, 4]
>>> a[0:1]
[0]
>>> a[0:0]
[]