切片操作

   在我们代码的世界,下标都是从0开始,从左向右遍历的,从右向左遍历的话,需要这样操作了,c++示例:

   

for(int i=len-1; i<=0; --i) {
    doSomething
}

     python中的列表的下标也是从0开始计算的,也专门为最后一个元素的规定了一个下标:-1。

    定义一个列表:   

l = [0, 1, 2, 3, 4]
print l[0] #输出第一个元素 0
print l[-1] #输入最后一个元素 4

   取单个元素时如果输入的下标超出了列表的范围,就会引发IndexError。

   

    切片操作能够取得原列表的一个子集(包括空子集),操作定义l[start:end:step]

     start : 获取的元素的起始位置,包括在结果集中,默认为0

     end : 获取的元素的结束位置,不包括在结果集中,默认为最后一个元素的下一个位置;

     step : 步长, 默认为1,当此值为正整数时表示从左向右取,为负整数时表示从右向左取;


      如下:

      

l[:] #所有的值都是默认的,返回原列表[0,1,2,3,4]
l[0:1] #从第0个元素取到第1个元素,[0]
l[::-1] #从右向左取元素 [4,3,2,1,0]

  

     切片操作在内部调用的_getitem__,__setitem__,__delitem__和slice函数。如果我们在使用切片操作时,指定的start、end的索引超出范围了会怎么样呢?

l[-100:] #会发生什么事??

     哈哈,输出了原来的列表:[0,1,2,3,4]

     在切片操作中,python把start、end的索引修正到了有效范围呢。

     

     在切片操作中,单纯的数字索引会让我们过一段时间就忘记了这么做的意义,比如:我们的一个字符串"P9982354book",前8个字符表示书的编号,我们怎么取到它呢?可以这么来实现:

 

str = "P9982354book"
l = list(str) #['P', '9', '9', '8', '2', '3', '5', '4', 'b', 'o', 'o', 'k']
id = l[:9] #['P', '9', '9', '8', '2', '3', '5', '4', 'b'],过了一会我们还能记得这个:9是来干什么的嘛
id = ''.join(id) #'P9982354b'

修改id=l[:9]为以下两行:

bookIdSlice = slice(9)#slice(None, 9, None)
id = l[bookIdSlice]

一个有意义的名字永远比几个数字保存、传递的信息要丰富。

   

     

      

   


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值