在Python中,切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。 普通索引只取出序列中 一个下标 对应的元素,而切片取出序列中一个范围对应的元素。通俗一点就是在一定范围里面,用刀切出一部分,达到自己需要的一部分。.
?
索引
首先我们要了解索引,Python中切片的索引方式分为两种:
以 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 为例:
切片的语法格式
object[start_index:end_index:step]
(1)step: 正负数均可,其绝对值大小决定了切取数据时的“步长”,正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。
(2)start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
(3)end_index:表示终止索引(不包含索引本身),可以确定索引的结束为止。当为空时表示取到“终点”,具体终点是在左边还是右边,要看step的值是正数还是负数。
以下为例:
>>>a_list = [1, 2, 3, 4, 5]
>>>b_list = a_list[1:4]
>>>b_list
[2, 3, 4]
均以列表 >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 为例
1)取偶数位置
>>>b = a[::2]
[0, 2, 4, 6, 8]
2)取奇数位置
>>>b = a[1::2]
[1, 3, 5, 7, 9]
3)切取完整对象
>>> a[:] # 从左往右
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::] # 从左往右
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::-1] # 从右往左
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
4)任意切
>>> a[1:6] # step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。
[1, 2, 3, 4, 5]
>>>a[1:6:-1] # step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾。
>>> [] # 输出为空列表,说明没取到数据。
>>>a[6:1] # step=1,决定了从左往右取值,而start_index=6到end_index=1决定了从右往左取值,两者矛盾。
>>> [] # 同样输出为空列表。
>>>a[:6] # step=1,从左往右取值,从“起点”开始一直取到end_index=6。
>>> [0, 1, 2, 3, 4, 5]
>>>a[:6:-1] # step=-1,从右往左取值,从“终点”开始一直取到end_index=6。
>>> [9, 8, 7]
>>>a[6:] # step=1,从左往右取值,从start_index=6开始,一直取到“终点”。
>>> [6, 7, 8, 9]
>>>a[6::-1] # step=-1,从右往左取值,从start_index=6开始,一直取到“起点”。
>>> [6, 5, 4, 3, 2, 1, 0]
参考: