FAQ1: 列表索引和切片問題

問題1. 超過列表成員個數的索引訪問列表會出現IndexError錯誤,可是若是用切片去訪問就不會報錯,而是返回一個空列表。一樣元組也是。spa

>>> a=[1,2,3,4]
>>> a[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> a[10:]
[]
>>> a[10:11]
[]
>>> a=(1,2,3)
>>> a[1]
2
>>> a[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
>>> a[10:]
()
>>> a[10:20]
()
>>> 

切片操做說明:a[1:3:2] 表示獲取索引從1到2的元素(不包括索引爲3的元素),而且每兩個元素只保留一個。code

>>> a=[1,2,3,4,5,6,7,8,9]
>>> a[0:10:3]
[1, 4, 7]
>>> a[1:3:2]
[2]
>>> a[::-1]   #實現列表反轉
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> 

經過切片獲取元素,能夠先想象經過給對象中每一個元素做標記,
標記1:  0, 1, 2, 3, 4, 5, 6, 7
      a=[1, 2, 3, 4, 5, 6, 7, 8]
標記2: -8,-7, -6,-5, -4,-3,-2,-1對象

標記以後有3種獲取方法,原則只要在兩個標記位之間有元素存在就能夠獲取到,不然返回空列表。
第一種:經過標記1順序獲取:blog

>>> a=[1,  2,  3, 4, 5, 6, 7, 8]
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[0:]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[:8]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[0:8]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[2:4]
[3, 4]
>>> 

第二種:經過標記2順序獲取索引

>>> a=[1,  2,  3, 4, 5, 6, 7, 8]
>>> a[-8:]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> a[-8:-1]
[1, 2, 3, 4, 5, 6, 7]   #注意a[-8:-1],其中-1索引位置元素是獲取不到的。
>>> a[:-1]
[1, 2, 3, 4, 5, 6, 7]   #注意a[-8:-1],其中-1索引位置元素是獲取不到的。
>>> a[-6:-2]
[3, 4, 5, 6]

第三種:經過混合標記1和2順序獲取:ast

>>> a=[1,  2,  3, 4, 5, 6, 7, 8]
>>> a[-8:0]
[]
>>> a[-8:1]
[1]
>>> a[0:-1]
[1, 2, 3, 4, 5, 6, 7]
>>> a[8:-1]
[]
>>> a[7:-1]
[]
>>> a[6:-1]
[7]
相關文章
相關標籤/搜索