为什么Python没有为此抛出错误?

时间:2013-06-22 11:49:29

标签: python matlab python-2.7 scilab

MATLAB为此抛出错误:

>> a = [2,3,4]
>> a(3:4)

  index out of bounds

如果用Python尝试类似的东西,为什么它不合法?

>>> a = [2,3,4]
>>> a[2:3]
[4]

考虑到编号从Python中的零开始,python中的索引'3'是否超出界限?

4 个答案:

答案 0 :(得分:3)

切片永远不会在python中出现超出索引的错误..

>>> s =[1,2,3]
>>> s[-1000:1000]
[1, 2, 3]

从字符串docs开始(也适用于列表,元组):

  

优雅地处理退化切片索引:也是一个索引   large由字符串大小替换,上限小于   下限返回一个空字符串。

Docs(列表):

  

si的{​​{1}}切片被定义为项目序列   索引jk。如果i <= k < ji大于j,请使用   len(s)。如果省略len(s)i,请使用None。如果省略0j,请使用   None。如果len(s)大于或等于i,则切片为空。

超出范围的负片段索引被截断,但不对单元素(非片段)索引尝试此操作:

j

答案 1 :(得分:1)

正如其他人所回答的那样,Python通常不会针对超出范围的切片引发异常。但是,这很重要,您的切片超出范围。切片被指定为闭合开放区间,其中区间的开头是包含的,结束点是独占的。

换句话说,[2:3]是三元素列表的完全有效切片,它指定一个单元素间隔,从索引2开始到索引3之前结束。如果一个在此之后在您的示例中,最后一个端点(例如3)是非法的,将无法在切片中包含列表的最后一个元素。

答案 2 :(得分:0)

你有一个范围。一旦该范围内的一个指数超出界限,提取元素的过程就会停止。

Python中的切片没有错误。

答案 3 :(得分:0)

因为[2:3]从4到下一个ele - 1,返回4。

切片永远不会引发错误。它至少可以返回一个空列表/元组/字符串(取决于课程类型):

>>> a[12312312:]
[]

[start:end:step]

因此索引2为4,则end - 1为索引2,即4