Python 中的切片

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

切片的语法

a = [1,2,3,4]
x = a[1:2]    #实际上执行的是 a.__getitem__(slice(1,2,None))

slice([start], stop[, step]

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

示例

>>> s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[5:0:-1]
[5, 4, 3, 2, 1]
>>> s[5:4:-1]
[5]
>>> s[:3:-1]
[9, 8, 7, 6, 5, 4]
>>> s[0:3:-1]
[]
>>> s[9::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> s[::2]
[0, 2, 4, 6, 8]

代码分析

首先定义 s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Python中正索引是从0开始的,负索引从-1开始,索引1对应1, 而索引-1对应9.

s[5:0:-1]: 1.step 为负数,从右往左输
           2.从索引 5 开始 到索引0 结束, 但不包括索引0 , 输出为 [5, 4, 3, 2, 1]

s[:3:-1]: 1.step 为负数,从右往左输出
           2.step 为负数,[start]默认值为索引最大值, 即 9, 那么这个切片等价于s[9:3:-1]
           3.从索引 9 开始 到索引3 结束, 但不包括索引3 , 输出为[9, 8, 7, 6, 5, 4]

s[9::-1]:  1.step 为负数,从右往左输
           2.step 为负数,[stop]默认值为0, 那么这个切片等价于s[9:0:-1],输出为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

s[::2]:    1.step 为正数,从右往左输
           2.step 为正数,start默认是0,stop默认是索引最大值,那么这个切片等价于s[0:9:2
           3.step 为2表示走两步, 即中间间隔一个字符, 输出为[0, 2, 4, 6, 8]

  

参考:1.http://blog.csdn.net/hengyunabc/article/details/6540157

           2.http://topic.csdn.net/u/20120318/09/8ec11819-29e7-4c8f-8ebc-b7d1d13de612.html [3楼 RabbitLBJ]

转载于:https://my.oschina.net/jeffyu/blog/56930

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值