`

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范围的值。

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

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

这里讲到了本节python 教程的重点了,根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比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的切片规则.docx

    python的切片规则 Python的切片规则是Python中非常重要的一个特性,它可以让我们轻松地对列表、元组、字符串等序列类型进行切片操作。本文将详细介绍Python的切片规则,包括切片的语法、切片的用法以及切片的注意...

    Python切片操作实例分析

    本文实例讲述了Python切片操作。分享给大家供大家参考,具体如下: 在很多编程语言中,针对字符串提供了截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片操作就可以完成。 切片操作...

    Python列表切片用法示例

    Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。  格式:【start:end:step】  start:起始索引,从0开始,-1表示结束  end:结束索引  step:步长,end-start,步长为正时,从左向右...

    Python切片操作深入详解

    在Python中对于具有序列结构的数据来说都可以使用切片操作,需注意的是序列对象某个索引位置返回的是一个元素,而切片操作返回是和被切片对象相同类型对象的副本。 如下面的例子,虽然都是一个元素,但是对象类型是...

    Python 的切片为什么不会索引越界.docx

    切片(slice)是 Python 中一种很有特色的特性,在正式开始之前,我们先来复习一下关于切片的知识吧。 切片主要用于序列对象中,按照索引区间截取出一段索引的内容。 切片的书写形式:[i : i+n : m] ;其中,i...

    Python中序列的修改、散列与切片详解

    在Python中,最基本的数据结构是序列(sequence)。下面这篇文章主要给大家介绍了关于Python中序列的修改、散列与切片的相关资料文中通过示例代码介绍的非常详细,需要的朋友可以参考,下面来一起看看吧。

    dearxuany#Sharon_Technology_learning_note#Python 序列:元组1.MD

    详见* 关于序列基本操作* 关于元素赋值、删除元素、切片赋值[Python序列:列表]

    Python编程之序列操作实例详解

    本文实例讲述了Python编程之序列操作。分享给大家供大家参考,具体如下: #coding=utf8 ''''' 序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。 可以通过切片操作一次获得多个元素。...

    测量程序编制 - python 17数据类型:序列.pptx

    元素…元素n-1元素n元素n所引下标所引下标序列切片和相加序列的切片在讲字符串切片时已经讲过,不再叙述序列相加:Python 中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会...

    Python序列操作之进阶篇

    列表和元组这两种数据类型是最常被用到的序列,python内建序列有六种,除了刚刚有说过的两种类型之外,还有字符串、Unicode字符串、buffer对像和最后一种xrange对像,这几种都是不常使用的。本文讲解了列表推导式、...

    分析python切片原理和方法

    切片操作不是列表特有的,python中的有序序列都支持切片,如字符串,元组。 切片的返回结果类型和切片对象类型一致,返回的是切片对象的子序列,如:对一个列表切片返回一个列表, 字符串切片返回字符串。 切片生成...

    Python 序列

    目录  python 序列简介  python 序列图表  列表与列表推导式 列表的创建与删除 创建列表 删除列表 列表常用方法 (1)append()、insert...Python序列类似于其他语言中的数组,但功能要强大很多。 Python中常用的序

    Python切片索引用法示例

    在Python中,可以用用简单的方括号加一个下标的方式访问序列的每一个元素,这种方式称之为切片操作符,切片操作符有三种形式: [],[:],[::] 访问某一数据元素的语法如下: sequence[index] sequence是序列的名字,...

    Python-序列.zip

    037.列表_切片slice操作 038.列表_排序_revered逆序_max_min_sum 039.列表_二维列表_表格数据的存储和读取 040.元组_特点_创建的两种方式_tuple()要点 041.元组_元素访问_计数方法_切片操作_成员资格判断_zip() 042....

    Python的学习心得和知识总结(三)|Python基础(列表、元组、字典和集合)

    接下来,我们学习新的知识 Python序列。 序列 什么是序列 列表(List)是什么 列表对象的常用方法列表对象的四种创建列表元素的增加删除列表元素的访问计数列表对象的切片操作列表元素的排序逆序列表相关的内置函数...

    Python 列表使用教程.wmv

    序列都可以进行的操作包括索引,切片,加,乘,检查成员。 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。 ...

    Python进阶之自定义对象实现切片功能

    切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),在《Python进阶:切片的误区与高级用法》中,我介绍了切片的基础用法、高级用法以及一些使用误区。这些内容都是基于原生的序列类型(如字符串...

    Python序列

    目录1. 索引2....Python 中内置了5个常用的序列结构,分别是列表、元组、集合、字典和字符串。 序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列, 每一个值( 称为元素)都分配一个数字,称

    python基础教程 第三版 中文 高清 pdf

    2.2 通用的序列操作 2.2.1 索引 2.2.2 切片 2.2.3 序列相加 2.2.4 乘法 2.2.5 成员资格 2.3 列表:Python的主力 2.3.1 函数 list 2.3.2 基本的列表操作 2.3.3 列表方法 2.4 元组:不可修改的序列 2.5 小...

    python 基于有序切片的医学图像三维重建

    因此,在重建前需要先对医学图像进行图像分割,分割出自己需要的部分,对分割结果进行二值化(背景为黑、分割出的部分为白色),这里要注意的是,分割结果需要按照原切片序列的顺序进行命名。 希望对大家有所帮助!...

Global site tag (gtag.js) - Google Analytics