为什么切片的endindex不是endindex

时间:2013-04-09 19:12:31

标签: python python-2.7 slice

我刚刚开始学习python而且我已经开始学习字符串了。

当我输入

suitcase = ["sunglasses", "hat", "passport", "laptop", "suit", "shoes"]
print suitcase[0:1]

我希望它能打印['sunglasses', 'hat],但我得到['sunglasses']。从我所读到的aList[beginIndex:endIndex]开始,但根据我的经验,它更像是aList[beginIndex:endIndex+1]来获取你最后的索引。

有人可以解释为什么会这样吗?我无法理解它背后的原因。

3 个答案:

答案 0 :(得分:2)

docs:“从i到j的s片被定义为具有索引k的项目序列,使得i <= k

答案 1 :(得分:2)

我认为最好的论据是你可以使用endIndex - startIndex获得切片返回的元素数量。

这也与内置的range()函数密切相关。如果使用两个参数,则将它们解释为启动和停止索引,但如果仅使用一个,则它是停止索引,并且起始索引设置为0。所以range(5)给出了一个包含5个元素的列表。如果切片工作,他们认为他们应该range()可能会有相同的行为,range(5)返回6个元素会非常混乱。

答案 2 :(得分:0)

Python中的切片被定义为包含/排他,即您想要的第一个项目,然后是想要的第一个项目。

我不知道为什么他们这样做,但它与range()的工作方式一致,并且与len()(也就是整个容器的切片{{ 1}}是x);这也适用于否定切片:[0:len(x)]x[-1]