0%

Python可切片对象

前言:打CTF的时候去遇到了python中的切片问题,来学习一下

Python可切片对象的索引方式

分为正索引和负索引两种,以list对象为a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

img

Python切片操作的一般方式

一个完整的切片表达式包含两个”:”,用于分割三个参数(start_index:end_index:_step)。当只有”:”时,默认第三个参数step = 1;当一个”:”也没有时,start_index = end_index,表示切取start_index指定的那个元素

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定切取数据时的”步长”,正负号决定切取方向,正号表示”从左往右”,负表示”从右往左”,step值省略默认为1

start_index:表示起始索引(包含该索引对应的值),该值省略表示对象”端点”开始,step为正时,从起点开始,反之终点开始

end_index:表示终止索引值(不包含该索引对应的值),该值省略表示”端点”结束,step为正时,到终点结束,反之起点结束

Python切片操作详细例子

以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

切取单个元素

1
2
3
4
5
>>>a[0]
>>>0
>>>a[-4]
>>>6
当索引只有一个数时,表示切取某一元素

切取完整对象

1
2
3
4
5
6
>>>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]

一层切片的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>>a[1:6]
>>> [1, 2, 3, 4, 5]
>>>step = 1,从左往右取值,start_index = 1;end_index = 6

>>>a[1:6:-1]
>>>[] ;输出空列表
step = -1,说明是从右往左取值,但是start小于end是从左往右,矛盾

>>>a[6:2]
>>>[] ;输出空列表
step = 1,说明是从左往右取值,但是start大于end是从右往左取值,矛盾

>>>a[:6:-1]
>>> [9, 8, 7]
step= -1,说明是从右往左取值

>>>a[6::-1]
>>>[6,5,4,3,2,1,0]
step = -1,说明是从start = 6

多层切片操作

1
2
3
4
5
6
>>>a[:8][2:5][-1:]
>>>[4]
相当于
a[:8]=[0,1,2,3,4,5,6,7]
a[:8][2:5]=[2,3,4]
a[:8][2:5][-1:]=[4]