python切片

切片作用:用来切割可迭代的对象

语法:object[star:end:step]

start:切片的起始位置

end:切片的结束位置,但是不包含end

step :步长,默认取值为1,为正数的情况表示从左往右,反之从右往左

注:一个完整的切片包括3个参数和两个冒号

切片的几种特殊情况:

object[start:]

obeject[:end]

obeject[start:end]

object[start:end:step]

1.切割单个值(操作与数组类似,索引从0开始)

2.切割完整对象

a[ : ]

a[ :: ]

以上两种均表示取出容器中的所有对象

a[ ::-1 ] :表示容器取反操作

3. start和end全为负(-)索引的情况

>>>a[-1:-6] >>> [] step=1,从左往右取值,而start-1到end=-6从右往左取值,两者矛盾,所以为空
>>>a[-1:-6:-1] >>> [9, 8, 7, 6, 5] step=-1,从右往左取值,start-1到end-6同样是从右往左取值 
>>>a[-6:-1] >>> [4, 5, 6, 7, 8] step=1,从左往右取值,而start=-6到end=-1同样是从左往右取值 
注:从右往左步长只能为-1
>>>a[:-6:-1] >>> [9, 8, 7, 6, 5] step=-1,从右往左取值,从“终点”开始一直取到end_index=-6。 
>>>a[-6::-1] >>> [4, 3, 2, 1, 0] step=-1,从右往左取值,从start_index=-6开始,一直取到“起点”。 

4. start_index和end_index正(+)负(-)混合索引的情况

>>>a[1:-6] >>> [1, 2, 3] start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值,因此结果正确 
>>>a[1:-6:-1] >>> [] start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾,因此为空。 
>>>a[-1:6] >>> [] start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾,因此为空。 
>>>a[-1:6:-1] >>> [9, 8, 7] start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值,因此结果正确。 

5. 连续切片操作

>>>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 理论上可无限次连续切片操作,只要上一次返回的依然是非空可切片对象。 

6. 切片操作的三个参数可以用表达式

>>>a[2+1:3*2:7%3] >>> [3, 4, 5] 即:a[2+1:3*2:7%3] = a[3:6:1] 

7. 其他对象的切片操作

前面的切片操作说明都以list为例进行说明,但实际上可进行的切片操作的数据类型还有很多,包括元组、字符串等等。

>>> (0, 1, 2, 3, 4, 5)[:3] >>> (0, 1, 2) 元组的切片操作 
>>>'ABCDEFG'[::2] >>>'ACEG' 字符串的切片操作 
 

 常用切片操作

以列表: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] 

总结

(一)start、end、step可同为正、同为负,也可正负混合使用。但必须遵循一个原则,否则无法正确切取到数据:当start的位置在end的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start的位置在end的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start或end省略时,起始索引和终止索引由step的正负来决定,不会存在取值方向出现矛盾的情况(即不会返回空列表[]),但正和负取到的结果是完全不同的,因为一个向左一个向右。

(二)在利用切片时,step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但实际上a[-1:]=a[-1]=9,原因在于step=1表示从左往右取值,而起始索引start=-1本身就是对象的最右边的元素了,再往右已经没数据了,因此只有a[-1]一个元素。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值