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”不是越界了吗?

4

4 回答 4

3

切片永远不会在 python 中为超出范围的索引引发错误。

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

从关于字符串的文档(也适用于列表、元组):

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

文档(列表):

sfrom ito的切片j被定义为具有索引的项目序列,k使得i <= k < j。如果ij大于len(s),请使用 len(s)。如果i省略 or None,请使用0. 如果j省略 or None,请使用 len(s). 如果i大于或等于j,则切片为空。

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

>>> word = 'HelpA'
>>> word[-100:]
'HelpA'
于 2013-06-22T11:50:21.737 回答
1

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

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

于 2013-06-22T11:59:29.217 回答
0

你在那里有一个范围。一旦范围中的一个索引超出范围,提取元素的过程就会停止。

在 Python 中切片没有错误。

于 2013-06-22T11:50:54.317 回答
0

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

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

>>> a[12312312:]
[]

[start:end:step]

所以索引 2 是4,那么end - 1索引 2 是4

于 2013-06-22T11:51:39.117 回答