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]
相关文章
相关标签/搜索