MATLAB 为此引发错误:
>> a = [2,3,4]
>> a(3:4)
index out of bounds
如果用 Python 尝试过类似的事情,为什么它不是非法的?
>>> a = [2,3,4]
>>> a[2:3]
[4]
考虑到 Python 中的编号从零开始,python 中的索引“3”不是越界了吗?
MATLAB 为此引发错误:
>> a = [2,3,4]
>> a(3:4)
index out of bounds
如果用 Python 尝试过类似的事情,为什么它不是非法的?
>>> a = [2,3,4]
>>> a[2:3]
[4]
考虑到 Python 中的编号从零开始,python 中的索引“3”不是越界了吗?
切片永远不会在 python 中为超出范围的索引引发错误。
>>> s =[1,2,3]
>>> s[-1000:1000]
[1, 2, 3]
从关于字符串的文档(也适用于列表、元组):
退化的切片索引被优雅地处理:一个太大的索引被字符串大小替换,一个小于下限的上限返回一个空字符串。
文档(列表):
s
fromi
to的切片j
被定义为具有索引的项目序列,k
使得i <= k < j
。如果i
或j
大于len(s)
,请使用len(s)
。如果i
省略 orNone
,请使用0
. 如果j
省略 orNone
,请使用len(s)
. 如果i
大于或等于j
,则切片为空。
超出范围的负切片索引被截断,但不要对单元素(非切片)索引尝试此操作:
>>> word = 'HelpA'
>>> word[-100:]
'HelpA'
正如其他人回答的那样,Python 通常不会为超出范围的切片引发异常。但是,这很重要,您的切片不会超出范围。切片被指定为闭开区间,其中区间的开始是包含的,结束点是排除的。
换句话说,[2:3]
是三元素列表的一个完全有效的切片,它指定一个元素间隔,从索引 2 开始并在索引 3 之前结束。如果在您的示例中是最后一个端点,例如 3是非法的,则不可能将列表的最后一个元素包含在切片中。
你在那里有一个范围。一旦范围中的一个索引超出范围,提取元素的过程就会停止。
在 Python 中切片没有错误。
因为[2:3]
是从 4 到下一个 ele - 1,它返回 4。
切片永远不会引发错误。它至少可以返回一个空列表/元组/字符串(取决于课程的类型):
>>> a[12312312:]
[]
[start:end:step]
所以索引 2 是4
,那么end - 1
索引 2 是4
。