跳转至

切片

在编程经常会遇到从某个对象中抽取部分值的情况,“切片”操作正是为此而生,切片是非常实用的技能,虽然在上一章节已经讲过,在此章节重提,请熟练掌握。

例如,一个list如下:

list = ['i','love','python','very','much']

我们需要取前3个元素,该怎么做?你当然可以想到很多种解决方案,但是切片才是你最佳的选择。 试一试:

list[0:3]
['i', 'love', 'python']

list[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引 0,1,2 ,取值范围为左开右闭 [0,3)。上面还可以进一步简写为:

#当取值是从0开始的话,0可以省略不写
list[:3]

Python支持list[-1]取倒数第一个元素,同样支持倒数切片,例如:

#取后2个元素
list[-2:]

小结一下,Python支持正索引负索引两部分,如下图所示,以[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

切片操作语法

list[start_index:end_index:step]
  • step:正负数均可,其绝对值大小决定了切取数据时的步长,而正负号决定了切取方向,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。

  • start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

  • end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”

实操

list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

1. 从左往右切切所有

list[:]
list[::]

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2. 从右往左切切所有

list[::-1]

输出:

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

3.取偶数位置

list[::2]

输出:

[0, 2, 4, 6, 8]

4.取奇数位置

list[1::2]

输出:

[1, 3, 5, 7, 9]

5.后5个数

list[-5:]

输出:

[5, 6, 7, 8, 9]