Python序列的切片操作与技巧
来源:互联网 发布:网络监控如何设置 编辑:程序博客网 时间:2024/05/23 11:18
出处:http://www.cnblogs.com/ifantastic/archive/2013/04/15/3021845.html
Python 序列的切片操作与技巧
序列
序列(consequence)是 python 中一种数据结构,这种数据结构根据索引来获取序列中的对象。
python 中含有六种内建序列类:list, tuple, string, unicode, buffer, xrange。其中 xrange 比较特殊,它是一个生成器,其他几个类型具有的一些序列特性对它并不适合。
一般说来,具有序列结构的数据类型都可以使用:index, len, max, min, in, +, *, 切片。如:
>>> a = 'Iloveyou'>>> len(a)8>>> max(a)'y'>>> min(a)'I'>>> bool('o' in a)True>>> a + a'IloveyouIloveyou'>>> a*3'IloveyouIloveyouIloveyou'>>> a[1:4]'lov'
>>> a.index('y')
5
>>> a[5]
'y'
切片操作
对于具有序列结构的数据来说,切片操作的方法是: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 之间的值,否则会报错提示索引值超出范围。如:
>>> a=[1,2,3,4,5,6,7]>>> a[len(a)-1]7>>> a[-len(a)]1>>> a[len(a)]Traceback (most recent call last): File "<pyshell#98>", line 1, in <module> a[len(a)]IndexError: list index out of range>>> a[-len(a)-1]Traceback (most recent call last): File "<pyshell#99>", line 1, in <module> a[-len(a)-1]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设定为缺省值(即第一个对象和最后一个对象)。如:
>>> a[-100:100][1, 2, 3, 4, 5, 6, 7]
[注意]一定要记住,end_index其实是你第一个不想要获取的对象的索引,所以a[0:-1]是取不到a[-1]的,所以如果要使得切片片段包含end_index位置的对象,请缺省end_index,或者输入一个超出end_index范围的值。
利用步长对序列进行倒序取值
在切片运算中,步长为正,表示从左至右,按照索引值与起始位置索引之差可以被步长整除的规律取值;当步长为负,则表示从右至左,按照按照索引值与起始位置索引之差可以被步长整除的规律取值。
根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比reverse方法更方便,且适用于没有reverse方法的字符串和元组。
>>> a=[1,2,3,4,5,6,7]>>> b=(1,2,3,4,5,6,7)>>> c='Let me show you a little thing'>>> a[::-1][7, 6, 5, 4, 3, 2, 1]>>> b[::-1](7, 6, 5, 4, 3, 2, 1)>>> c[::-1]'gniht elttil a uoy wohs em teL'>>> a[1, 2, 3, 4, 5, 6, 7]>>> b(1, 2, 3, 4, 5, 6, 7)>>> c'Let me show you a little thing'>>> a.reverse()>>> a[7, 6, 5, 4, 3, 2, 1]
相对reverse而言,切片的方法不会改变列表的结构,所以这是在实际应用中比较有用的一个技巧。
- Python序列的切片操作与技巧
- Python 序列的切片操作与技巧
- Python序列的切片操作与技巧
- Python 序列的切片操作与技巧 详细讲解
- python序列的切片操作
- Python序列的切片操作符使用
- Python的序列切片
- Python的切片操作
- python -- 序列索引与切片的一些问题
- python切片操作符 :与::
- Python强大的切片操作
- Python 数组的切片操作
- Python中序列的切片和加号
- 简明python教程学习笔记之九-序列的通用操作(索引和切片)
- Python 的切片操作以及 利用步长对序列进行倒序取值
- python中序列方法与切片实现逆序的简便方法(::-1)
- [Python] 对字符串,列表的切片操作
- [Python]列表的切片操作符使用
- 关于 Java 数组的 12 个最佳方法
- 排序与二分查找
- Java8 中reduce的基本使用
- Unity将麦克风获取的音频实时的处理成可视化的音波
- jdk+tomcat安装
- Python序列的切片操作与技巧
- [How to] 使用HBase协处理器---基本概念和regionObserver的简单实现
- 浏览器内核信息汇总和
- Deep Learning模型之:CNN卷积神经网络(二)文字识别系统LeNet-5
- Java中HashMap的实现原理
- perl 调用自己写的pm
- 交换两个数的四种方法
- HDU 6142 Jedi Council(最小割-Dinic)
- 《30天自制操作系统》 day02