这行代码
print [0, 1, 2, 3, 4][0:1:1]
返回[0]
。
但是,以下代码行:
print [0, 1, 2, 3, 4][0:0:1]
返回[]
。
这是为什么?基于此Explain Python's slice notation,我的理解是格式应为:
a[start:end:step] # start through not past end, by step
所以不应该[0, 1, 2, 3, 4][0:0:1]
以第0个值开始和结束,从而返回[0]
?
答案 0 :(得分:6)
切片的“结束”索引始终从结果中排除;即listy[start:end]
返回listy[i]
所有start <= i < end
(注意使用<
代替<=
)。由于i
没有0 <= i < 0
,listy[0:0:anything]
,{{1}}将始终为空列表(或错误)。
答案 1 :(得分:2)
Python的切片表示法中的结束索引是独占的。一片[n:m]
将返回其索引为&gt; = n且&lt;米。
为了简化一些事情,请在没有步骤的情况下尝试(步长值为1时不需要):
>>> a = [0, 1, 2, 3, 4]
>>> a[0:1]
[0]
>>> a[0:0]
[]
作为一般规则,切片中的元素数等于切片的起始索引减去切片的结束索引。即,切片[n:m]
将返回m-n个元素。这与[0:1]
返回的一个元素(1-0)和[0:0]
返回的零元素(0-0)一致。
(请注意,如果任何切片索引超出数组大小,则不会出现这种情况。)
有关切片索引如何工作的精确可视化,请在http://docs.python.org/2/tutorial/introduction.html
搜索“记住切片如何工作的一种方法”答案 2 :(得分:1)
请注意,[0:0:1]
不是[0:1:1]
所以:
start = 0
end = 0
step = 1
切片[start:end:step]
表示它会返回start
和end - 1
之间的值step
,所以对于您的示例:
...[0:0:1]
介于0和-1之间的值,因此它不会返回任何内容。