`

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序列结构实验报告.doc

    【Python序列结构实验报告】 在Python编程中,序列结构是一种基本的数据组织形式,它包括了列表(list)、元组(tuple)、字符串(string)和字节串(bytes)。这些序列结构都支持索引和切片操作,以及一些共同的...

    python 切片操作新理解

    本文将详细阐述Python中切片操作的基本概念、应用场景以及实现技巧,帮助读者更好地理解和掌握这一核心功能。 #### 一、切片操作基础 在Python中,切片是一种非常实用的功能,用于提取序列(如字符串、列表等)的...

    python切片操作

    #### 二、序列切片的基础 序列类型如字符串、列表等可以通过切片操作进行访问和修改。切片的基本语法形式如下: - `sequence[index]`:获取单个元素。 - `sequence[start:end]`:获取从`start`到`end-1`的子序列。...

    python3实用编程技巧进阶(1套课程)\第3章-4 5 PYTHON切片操作 Python课程 教程 进阶 0基础学习

    在本课程“python3实用编程技巧进阶”中,我们将专注于第3章的第4和第5部分,即“PYTHON切片操作”。这一主题对于任何想要提升Python编程技能的人来说都是至关重要的,无论你是初学者还是有一定经验的开发者。 切片...

    Python序列类型及操作

    ### Python序列类型及操作 #### 序列类型定义与特性 在Python中,序列类型是一种基本的数据结构,它包括字符串、列表和元组等。序列是具有明确顺序的一系列元素集合,每个元素都有一个确定的位置,即索引值。...

    python课件-第2章 Python序列.ppt

    【Python序列】 在Python编程语言中,序列是一种基本的数据结构,它类似于其他编程语言中的数组,但提供了更丰富的操作和功能。Python的序列主要包括列表、元组、字符串,此外,字典、集合和range对象也支持一些序列...

    python的切片规则.docx

    Python的切片规则是编程语言Python中的一种独特特性,它允许开发者轻松地从列表、元组、字符串等序列类型的数据结构中提取出一部分元素。这一功能对于数据处理和操作至关重要,尤其是在处理大型数据集时。 一、切片...

    Python之切片共4页.pdf.zip

    总结来说,Python的切片功能强大且灵活,它简化了对序列数据的操作,使得代码更加简洁高效。理解并熟练掌握切片,对于提高Python编程技能和解决实际问题具有重要意义。在阅读"Python之切片共4页.pdf.zip"这个文档时...

    Python字符串切片操作知识详解

    ### Python字符串切片操作知识详解 #### 一、基本概念 在Python中,字符串切片是一种非常实用且强大的工具,用于从字符串中提取特定部分的数据。字符串是不可变的序列类型,这意味着一旦创建了一个字符串,就不能...

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

    Python 的切片(slice)操作是其序列类型(如列表、元组、字符串等)的一个强大特性,允许用户根据指定的起始、结束和步长(step)来截取序列的一部分。切片语法的格式是 `[start : stop : step]`,其中 `start` 是...

    Python切片操作实例分析

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

    python实现分段线性表示.zip_python_python时间序列_tunedtr_代码_分段线性表示

    可以方便地进行数据清洗、排序、切片和合并等操作。 3. **分段线性模型**:这种模型通过找到数据中的转折点(即斜率改变的点)将数据分割成多段直线,每段具有恒定的斜率。这通常涉及到拟合线性回归模型并对模型...

    第2章 Python序列.pptx

    Python序列概述 Python序列是 Python 中一种基本的数据结构,分为有序序列和无序序列。有序序列指的是元素之间有顺序关系的序列,例如列表、元组、字符串等;无序序列指的是元素之间没有顺序关系的序列,例如集合、...

    Python序列操作之进阶篇

    本篇文章主要聚焦于Python序列操作的进阶技巧,以提高代码的效率和可读性。 **列表推导式** 是Python中一个强大的特性,它允许我们在一行代码中生成新的列表,减少了对循环的依赖。例如,若要从文件名列表中提取...

    Python序列对象与String类型内置方法详解

    Python序列对象与String类型内置方法详解 Python中的序列类型数据结构是一类由整数进行索引的有序集合对象。这些对象可以支持成员关系测试、迭代等操作。序列类型分为可变序列和不可变序列两大类。可变序列如列表...

    Python列表切片用法示例

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

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

    本文将深入探讨Python序列中的修改、散列以及切片操作。 首先,让我们了解一下序列的修改。序列的基本操作包括访问、插入、删除和更新元素。Python中的列表支持这些操作,例如: ```python # 创建一个列表 seq = ...

Global site tag (gtag.js) - Google Analytics