FAQ1: 列表索引和切片问题
2017-02-06 16:53 一方书斋 阅读(540) 评论(0) 编辑 收藏 举报问题1. 超过列表成员个数的索引访问列表会出现IndexError错误,但是如果用切片去访问就不会报错,而是返回一个空列表。同样元组也是。
>>> 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的元素),并且每两个元素只保留一个。
>>> 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顺序获取:
>>> 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顺序获取:
>>> 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]