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