MATLAB为此抛出错误:
>> a = [2,3,4]
>> a(3:4)
index out of bounds
如果用Python尝试类似的东西,为什么它不合法?
>>> a = [2,3,4]
>>> a[2:3]
[4]
考虑到编号从Python中的零开始,python中的索引'3'是否超出界限?
答案 0 :(得分:3)
切片永远不会在python中出现超出索引的错误..
>>> s =[1,2,3]
>>> s[-1000:1000]
[1, 2, 3]
从字符串docs开始(也适用于列表,元组):
优雅地处理退化切片索引:也是一个索引 large由字符串大小替换,上限小于 下限返回一个空字符串。
Docs(列表):
从
s
到i
的{{1}}切片被定义为项目序列 索引j
,k
。如果i <= k < j
或i
大于j
,请使用len(s)
。如果省略len(s)
或i
,请使用None
。如果省略0
或j
,请使用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
。