python基础知识之列表的分片


分片操作用来 访问一定范围内的元素,通过在方括号内用冒号隔开两个索引来实现。第一个索引的元素是开始点,包括在结果之中,第二个索引的元素是结束点,不包括在结果之中。


>>> tag='www.python.com'
>>> tag[4:10]
'python'
>>> tag[4:-4]
'python'
>>>



千万记住

索引是从0开始的,列表中的牵引与元素在列表中的第几个位置数刚好是多一的。


>>> num=[1,2,3,4,5,6,7,8,9,10]
>>> num[4:6]
[5, 6]
>>> num[0:1]
[1]
>>>


上面例子中,num[4:6]表示访问的一个元素的索引是4,由于索引从0开始,即列表中的第5个元素,访问截至索引为6的元素(访问元素不包含此元素),即列表中第7个元素。所以,分片结果为列表中第5个元素[5]和第六个元素[6]组成的列表。以此类推,num[0:1]表示访问索引为0的元素,即为列表第一个元素[0]。



注意:分片中最左边的索引要比它右边索引出现的早,否则就会成为空列表。


>>> num[-3:-1]
[8, 9]
>>> num[-3:0]
[]
>>>



捷径1:访问倒数几个元素(包括最后一个元素)。

>>> num[-3:]
[8, 9, 10]
>>>

捷径2:访问前面几个元素(包括第一个元素)。

>>> num[:4]
[1, 2, 3, 4]
>>>

捷径3:访问全部元素。

>>> num[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>

步长问题:

其实,分片除了开始点和结束点外还有一个参数,就是步长。通常步长都是隐式设置的,像以上所有例子中步长都是隐式设置为1了。步长可以为正数,可以为负数,但不能为0.

>>> num[10:0:2]
[]
>>> num[::1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> num[::2]
[1, 3, 5, 7, 9]
>>> num[3:7:3]
[4, 7]
>>>
>>> num[0:10:-2]
[]
>>> num[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> num[8::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> num[5::-2]
[6, 4, 2]
>>> num[:5:-2]
[10, 8]
>>>
>>> num[::0]
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    num[::0]
ValueError: slice step cannot be zero
>>>



步长为正数,列表从头部向右访问元素,步长为负数,列表从尾部向左访问元素。在步长问题中,一定要遵守第一个索引比第二个早出现原则。num[10:0:2]中步长为正数,列表从头部向右访问元素,但是由于第一个索引10比第二个索引0晚出现,所以结果为空列表。num[0:10:-2]中步长为负数,列表从尾部向左访问,第一个索引0比第二个索引10晚出现,所以结果为空列表。