Python中的切片

来源:互联网 发布:重新安装centos 编辑:程序博客网 时间:2024/05/16 15:47

Python中的切片容易混淆,这里总结一下自己的看法


切片的语法


1 a = [1,2,3,4]
2 x = a[1:2]    #实际上执行的是 a.__getitem__(slice(1,2,None))
1 slice([start], stop[, step]
2  
3 step的符号表示一种方向的含义
4 +:从左向右看,start默认是0,stop默认是索引最大值
5 -:从右向左看,start默认是索引最大值,stop默认是0
1 1.先看第三个参数,如果该数为正,则从前往后数,如果为负,则从后往前数,如果非1,则是跳步来数(1表示走一步,跳0步)
2 2.PYTHON总是左开右闭的,也就是说第一个参数要包括,第二个参数不包括
3 3.如果第一个参数没填,则自动设为第一个参数(根据第三个参数的正负判断是整数第一个还是倒数第一个)
4 4.如果第二个参数没填,则自动设定为最后一个参数(根据第三个参数的正负判断是整数第一个还是倒数第一个
5  另外这个参数不会包括进去【左开右闭】)
示例


01 >>> s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
02 >>> s[5:0:-1]
03 [5, 4, 3, 2, 1]
04 >>> s[5:4:-1]
05 [5]
06 >>> s[:3:-1]
07 [9, 8, 7, 6, 5, 4]
08 >>> s[0:3:-1]
09 []
10 >>> s[9::-1]
11 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
12 >>> s[::2]
13 [0, 2, 4, 6, 8]
代码分析


01 首先定义 s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
02  
03 Python中正索引是从0开始的,负索引从-1开始,索引1对应1, 而索引-1对应9.
04  
05 s[5:0:-1]: 1.step 为负数,从右往左输
06           2.从索引 5 开始 到索引0 结束, 但不包括索引0 , 输出为 [5, 4, 3, 2, 1]
07  
08 s[:3:-1]: 1.step 为负数,从右往左输出
09           2.step 为负数,[start]默认值为索引最大值, 即 9, 那么这个切片等价于s[9:3:-1]
10           3.从索引 9 开始 到索引3 结束, 但不包括索引3 , 输出为[9, 8, 7, 6, 5, 4]
11  
12 s[9::-1]:  1.step 为负数,从右往左输
13           2.step 为负数,[stop]默认值为0, 那么这个切片等价于s[9:0:-1],输出为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
14  
15 s[::2]:    1.step 为正数,从右往左输
16           2.step 为正数,start默认是0,stop默认是索引最大值,那么这个切片等价于s[0:9:2
17           3.step 为2表示走两步, 即中间间隔一个字符, 输出为[0, 2, 4, 6, 8]