Python序列的切片操作与技巧

Python中含有六种内建序列类:list, tuple, string, unicode, buffer, xrange。其中xrange比较特殊,它是一个生成器,其他几个类型具有的一些序列特性对它并不适合。

创新互联建站致力于互联网网站建设与网站营销,提供成都做网站、网站建设、外贸营销网站建设、网站开发、seo优化、网站排名、互联网营销、成都小程序开发、公众号商城、等建站开发,创新互联建站网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。

 
 
 
  1. >>> a = 'Iloveyou' 
  2. >>> len(a) 
  3. >>> max(a) 
  4. 'y' 
  5. >>> min(a) 
  6. 'I' 
  7. >>> bool('o' in a) 
  8. True 
  9. >>> a + a 
  10. 'IloveyouIloveyou' 
  11. >>> a*3 
  12. 'IloveyouIloveyouIloveyou' 
  13. >>> a[1:4] 
  14. 'lov' 
  15. >>> a.index('y') 
  16. >>> a[5] 
  17. 'y' 

一般说来,具有序列结构的数据类型都可以使用:index, len, max, min, in, +, *, 切片。如:

切片操作

对于具有序列结构的数据来说,切片操作的方法是:consequence[start_index: end_index: step]。

start_index:表示是第一个元素对象,正索引位置默认为0;负索引位置默认为 -len(consequence)

end_index:表示是最后一个元素对象,正索引位置默认为 len(consequence)-1;负索引位置默认为 -1。

step:表示取值的步长,默认为1,步长值不能为0。

[注意]对于序列结构数据来说,索引和步长都具有正负两个值,分别表示左右两个方向取值。索引的正方向从左往右取值,起始位置为0;负方向从右往左取值,起始位置为-1。因此任意一个序列结构数据的索引范围为 -len(consequence) 到 len(consequence)-1 范围内的连续整数。

切片操作会将按照给定的索引和步长,截取序列中由连续的对象组成的片段,单个索引返回值可以视为只含有一个对象的连续片段。

切片的过程是从第一个想要的对象开始,到第一个不想要的对象结束。第一个想要的对象到第一个不想要的对象之间的连续对象就是你所有想要的对象。

因此在consequence[start_index: end_index]中,切片中包含了consequence[start_index],但不包括consequence[end_index]。

切片的操作类型:

con[start_index]:返回索引值为start_index的对象。start_index为 -len(con)到len(con)-1之间任意整数。

con[start_index: end_index]:返回索引值为start_index到end_index-1之间的连续对象。

con[start_index: end_index : step]:返回索引值为start_index到end_index-1之间,并且索引值与start_index之差可以被step整除的连续对象。

con[start_index: ]:缺省end_index,表示从start_index开始到序列中最后一个对象。

con[: end_index]:缺省start_index,表示从序列中第一个对象到end_index-1之间的片段。

con[:]:缺省start_index和end_index,表示从第一个对象到最后一个对象的完整片段。

con[::step]:缺省start_index和end_index,表示对整个序列按照索引可以被step整除的规则取值。

在使用单索引对序列寻址取值时,你所输入的索引值必须是处于 -len(consequence) 到 len(consequence)-1 之间的值,否则会报错提示索引值超出范围。如:

 
 
 
  1. >>> a=[1,2,3,4,5,6,7] 
  2. >>> a[len(a)-1] 
  3. >>> a[-len(a)] 
  4. >>> a[len(a)] 
  5.   
  6. Traceback (most recent call last): 
  7.   File "", line 1, in  
  8.     a[len(a)] 
  9. IndexError: list index out of range 
  10. >>> a[-len(a)-1] 
  11.   
  12. Traceback (most recent call last): 
  13.   File "", line 1, in  
  14.     a[-len(a)-1] 
  15. IndexError: list index out of range 

其中a[len(a)-1]等同于a[-1],a[-len(a)]等同于a[0],分别表示序列的最后一个和第一个对象。

当使用冒号(:)对序列进行切片取值时,你所输入的无论是start_index或者end_index,都不必局限于 -len(a) 和 len(a)-1 之间,因为只有当你输入的索引号处于这个区间时才真正有效,而当你输入的索引号超出这个范围时,python会自动将start_index或end_index设定为缺省值(即第一个对象和最后一个对象)。如:

 
 
 
  1. >>> a[-100:100] 
  2. [1, 2, 3, 4, 5, 6, 7] 

[注意]一定要记住,end_index其实是你第一个不想要获取的对象的索引,所以a[0:-1]是取不到a[-1]的,所以如果要使得切片片段包含end_index位置的对象,请缺省end_index,或者输入一个超出end_index范围的值。

利用步长对序列进行倒序取值

在切片运算中,步长为正,表示从左至右,按照索引值与起始位置索引之差可以被步长整除的规律取值;当步长为负,则表示从右至左,按照按照索引值与起始位置索引之差可以被步长整除的规律取值。

根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比reverse方法更方便,且适用于没有reverse方法的字符串和元组。

 
 
 
  1.   
  2.   
  3. >>> a=[1,2,3,4,5,6,7] 
  4. >>> b=(1,2,3,4,5,6,7) 
  5. >>> c='Let me show you a little thing' 
  6. >>> a[::-1] 
  7. [7, 6, 5, 4, 3, 2, 1] 
  8. >>> b[::-1] 
  9. (7, 6, 5, 4, 3, 2, 1) 
  10. >>> c[::-1] 
  11. 'gniht elttil a uoy wohs em teL' 
  12. >>> a 
  13. [1, 2, 3, 4, 5, 6, 7] 
  14. >>> b 
  15. (1, 2, 3, 4, 5, 6, 7) 
  16. >>> c 
  17. 'Let me show you a little thing' 
  18.   
  19. >>> a.reverse() 
  20. >>> a 
  21. [7, 6, 5, 4, 3, 2, 1] 

相对reverse而言,切片的方法不会改变列表的结构,所以这是在实际应用中比较有用的一个技巧。

原文链接:http://www.cnblogs.com/ifantastic/archive/2013/04/15/3021845.html

网站题目:Python序列的切片操作与技巧
地址分享:http://www.gawzjz.com/qtweb2/news36/2536.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联