2013-06-22 145 views
3

MATLAB拋出了這樣的錯誤:爲什麼Python不會爲此拋出錯誤?

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

    index out of bounds 

如果類似的事情是與Python試過了,爲什麼是不是違法?

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

考慮到編號從Python中的零開始,Python中的索引'3'是否越界?

回答

3

切片永遠的Python爲出界指標的提高錯誤..

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

docs的字符串(適用於列表,元組以及):

退化的切片索引被處理優雅地:太 大的索引被字符串大小替換,小於 下限的上限返回空字符串。

Docs(列表):

sij切片被定義爲物品的序列與 索引k使得i <= k < j。如果ij大於len(s),則使用 len(s)。如果省略iNone,請使用0。如果省略jNone,則使用 len(s)。如果i大於或等於j,則切片爲空。

超出範圍的負切片索引會被截斷,但不嘗試一下本作的單元素(非片)指數:

>>> word = 'HelpA' 
>>> word[-100:] 
'HelpA' 
0

你有一個範圍存在。只要範圍內的一個索引超出界限,就會停止提取元素的過程。

Python在切片中沒有錯誤。

0

由於[2:3]爲4到下一ELE - 1,它返回4.

切片從未引發錯誤。它至少可以做的是返回一個空列表/元組/串(取決於當然的類型):

>>> a[12312312:] 
[] 

[start:end:step]

所以索引2是4,然後end - 1是索引2是4

1

正如其他人所回答的那樣,Python通常不會爲超出範圍的分片引發異常。但是,這很重要,您的切片是而不是超出範圍。切片被指定爲封閉開放間隔,其中間隔的開始是包含性的,並且結束點是獨佔的。

換句話說,[2:3]是一個三元素列表的完美有效切片,它指定了一個從索引2開始到索引3之前結束的單元素間隔。因爲你的例子中的3是非法的,所以不可能在切片中包含列表的最後一個元素。

相關問題