关于Python的切片表示法

时间:2013-10-27 02:11:48

标签: python slice

这行代码

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]

3 个答案:

答案 0 :(得分:6)

切片的“结束”索引始终从结果中排除;即listy[start:end]返回listy[i]所有start <= i < end(注意使用<代替<=)。由于i没有0 <= i < 0listy[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]表示它会返回startend - 1之间的值step,所以对于您的示例:

...[0:0:1]

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