Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598899
  • 博文数量: 80
  • 博客积分: 3315
  • 博客等级: 中校
  • 技术积分: 697
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-27 12:46
文章分类

全部博文(80)

文章存档

2014年(3)

2013年(3)

2012年(5)

2011年(19)

2010年(50)

我的朋友

分类: Python/Ruby

2011-09-18 22:41:30

  • 分片步长
进行分片的时候,分片的开始和结束点需要进行指定(不管是直接还是间接)。而另外一个参数(在python 2.3 加入到内建类型)--步长(step length)--通常都是隐式设置的。在普通的分片中,步长是1--分片操作就是按照这个步长逐个遍历序列的元素,然后返回开始和结束点之间的所有元素。

>>> numbers[0:10:1]  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在这个例子中,分片包含了另外一个数字。没错,这就是步长的显式设置。如果步长被设置为比1大的数,那么就会跳过某些元素。例如,步长为2的分片包括的是从开始到结束每隔1个的元素。
>>> numbers[0:10:2]  
[1, 3, 5, 7, 9]  
numbers[3:6:3]  
[4]

之前提及的捷径也可以使用。如果需要将每4个元素中的第1个提取出来,那么只要将步长设置为4即可:
>>> numbers[::4]  
[1, 5, 9]

当然,步长不能为0--那不会向下执行--但步长可以是负数,即从右到左提取元素:
>>> numbers[8:3:-1]  
[9, 8, 7, 6, 5]  
>>> numbers[10:0:-2]  
[10, 8, 6, 4, 2]  
>>> numbers[0:10:-2]  
[]  
>>> numbers[::-2]  
[10, 8, 6, 4, 2]  
>>> numbers[5::-2]  
[6, 4, 2]  
>>> numbers[:5:-2]  
[10, 8]

在这里要得到正确的分片结果需要动些脑筋。开始点的元素(最左边元素)包括在结果之中,而结束点的元素(最右边的元素)则不在分片之内。当使用一个负数作为步长时,必须让开始点(开始索引)大于结束点。在没有明确指定开始点和结束点的时候,正负数的使用可能会带来一些混淆。不过在这种情况下Python会进行正确的操作:对于一个正数步长,Python会从序列的头部开始向右提取元素,直到最后一个元素;而对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。

阅读(2286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~