Python基础知识:切片
什么是切片操作
在Python中,切片(slice)是对序列型对象(如list
, string
, tuple
)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。下面的代码初步展示了切片索引的力量。
>>> a = list(range(10))>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[:5][0, 1, 2, 3, 4]>>> a[5:][5, 6, 7, 8, 9]>>> a[2:8][2, 3, 4, 5, 6, 7]>>> a[::2][0, 2, 4, 6, 8]>>> a[::-1][9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
你可能还看不懂具体的语法(这正是本篇要介绍的),但你应该已经领略到了切片的花式操作。
写这篇文章的初衷是,一方面切片操作是Python中非常常见的,另一方面网上却很难找到全面系统的解析,比如以下结果是否让人有些迷惑:
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[0::-1][0]>>> a[0:len(a):-1][]
为什么有len(a)
和省略len(a)
结果会不一样?
本文致力于真正讲清楚Python切片的使用方法。若您希望进一步了解切片的实现原理,以帮助我们自定义类的切片操作,敬请期待本文的续篇,《切片完全指南(原理篇)》。
基本索引
我们从Python的基本索引开始,即单个整数的索引。假设被索引的序列仍为之前提到的a
,则基本索引的语法为a[index]
,其中index
为下标。读者可能会觉得这里过于简单,但我们要强调的是Python一个语法糖:负数下标索引,即:index
可以取为负数,当其为-n
时,对倒数第n
个元素进行索引。我们用一张表格值观展示a
的索引范围。
非负下标索引和负数下标索引共同构成了Python索引的有效范围:。有效范围的概念对切片的理解非常重要,在基本索引中,索引超出有效范围时会抛出IndexError
异常:
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[10]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: list index out of range>>> a[-11]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: list index out of range
但在切片中不是这样,我们将在下文具体解释。
简单切片
简单切片指的是这样的切片形式:a[start:stop]
,其行为是得到下标在这样一个前闭后开区间范围内的元素,其中start
和stop
为负数时,简单看作是负数下标对应的位置即可:
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[2:3][2]>>> a[5:9][5, 6, 7, 8]>>> a[5:-1][5, 6, 7, 8]>>> a[-5:9][5, 6, 7, 8]>>> a[-5:-1][5, 6, 7, 8]
事情到这里也很简单,下面着重讲解两个比较特殊的情况:超出有效索引范围和缺省。
超出有效索引范围
当start
或stop
超出上文提到的有效索引范围时,切片操作不会抛出异常,而是进行截断。可以这样去理解截断机制:我们假象把索引范围扩充到全体整数,只不过小于或大于的区域对应空元素,在这个扩充后的数轴上进行切片,只需把最终结果中的所有空元素忽略即可。
来看几个具体的例子
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[-100:5][0, 1, 2, 3, 4]>>> a[5:100][5, 6, 7, 8, 9]>>> a[-100:100][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[100:1000][]
另外,如果start
的位置比stop
还靠后怎么办?Python还是不会抛出异常,而是直接返回空序列:
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[6:5][]
缺省
start
和stop
都是可以缺省的,在缺省的情况下,Python的行为是尽可能取最大区间,具体来说:
按照扩充索引范围的观点,
start
的缺省值是无穷小(),stop
的缺省值是无穷大()。
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[:5][0, 1, 2, 3, 4]>>> a[5:][5, 6, 7, 8, 9]>>> a[100:][]
扩展切片
早期的Python解释器仅支持上述a[start:stop]
形式的基本切片,后来加入了下面要介绍的切片形式,扩展切片的名称也流传下来,实际上不用担心,这早已是Python所支持的标准语法。
扩展切片指的是这样的切片形式:a[start:stop:step]
,其中step
是一个非零整数,即比简单切片多了调整步长的功能,此时切片的行为可概括为:从start
对应的位置出发,以step
为步长索引序列,直至越过stop
对应的位置,且不包括stop
本身。事实上,简单切片就是step=1
的扩展切片的特殊情况。需要详细解释的是step
分别为正数和负数的两种情况。
step
为正数
当step
为正数时,切片行为很容易理解,start
和stop
的截断和缺省规则也与简单切片完全一致:
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[0:6:2][0, 2, 4]>>> a[::2][0, 2, 4, 6, 8]>>> a[:-2:2][0, 2, 4, 6]>>> a[4::2][4, 6, 8]
step
为负数
当step
为负数时,切片将其解释为从start
出发以步长|step|
逆序索引序列,此时,start
和stop
的截断依然遵循前述规则,但缺省发生一点变化,因为我们说过,在缺省的情况下,Python的行为是尽可能取最大区间,此时访问是逆序的,start
应尽量取大,stop
应尽量取小,才能保证区间最大,因此:
按照扩充索引范围的观点,
start
的缺省值是无穷大(),stop
的缺省值是无穷小()
>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a[5::-1][5, 4, 3, 2, 1, 0]>>> a[:4:-2][9, 7, 5]>>> a[::-1][9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Python基础知识:切片相关推荐
- Python 基础知识学习笔记——NumPy
Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...
- python基础知识学习笔记(1)
python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...
- python基础知识-python基础知识(一)
最近花时间整理了一下以前学过的python基础知识,语言最多的是使用. 1.1 开发模式 交互模式:简单的调试或者测试 开发流程 创建以.py结尾的python文件 在python文件中输入打印&qu ...
- python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))
Python介绍. Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置 python基础知识及数据分 ...
- Python基础知识总结(期末复习精简版)
文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...
- Python基础知识详解 从入门到精通(八)魔法方法
目录 Python基础知识详解 从入门到精通(八)魔法方法 什么是魔法方法 基础魔法方法(较为常用) 比较操作符 算数运算符 反运算(类似于运算方法) 增量赋值运算 一元操作符 类型转换 上下文管理( ...
- 一、 Python 基础知识笔记 —— 《Python编程:从入门到实践(第二版)》学习笔记
前言 先安利这本书<Python编程:从入门到实践(第二版)>,作者埃里克-马瑟斯,很适合新手入门,我的python入门学习就是以这本书为核心: 再安利一个网站:菜鸟教程-Python3教 ...
- python基础知识有哪些需要背(记住是基础知识)我是初学者
大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1.python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或看中Pyt ...
- Python基础知识笔记
文章目录 Python基础知识 教程:https://www.liaoxuefeng.com/wiki/1016959663602400 内置函数:https://docs.python.org/3/ ...
- 小白都能学会的Python基础 第二讲:Python基础知识
1.华小智系列 - Python基础(案例版) <Python基础>目录 第二讲:Python基础知识 1.变量.行与缩进 2.数据类型:数字与字符串 3.列表与字典 4.运算符介绍与实践 ...
最新文章
- win32ctypes.pywin32.pywintypes.error: (2, ‘LoadLibraryEx‘, ‘系统找不到指定的文件。‘)
- Python中Queue.get()方法阻塞
- 对Python中几种快速排序的实现以及运行时间进行比较
- Boost:bind绑定visit测试程序
- TensorFlow 学习指南 一、基础
- jinja Whitespace Control
- 2016-03-15 nsfoundation 数组 字典 nsrange等
- CS224N笔记——深入GRU和LSTM
- Java 实验五 王奕开
- C语言小案例_OA大典故障案例摘录【第1393篇】爱普生c5290 彩色喷墨打印机 打印横白道...
- Android EditText与软键盘
- MATLAB 绘制颜色图的 几个函数 colormap caxis colorbar shading+pcolor用法记录
- 2018天池大数据-印象盐城:数创未来大数据竞赛经验分享
- 【Angular】使用高德地图比例尺心得总结
- Redhat7.5升级openssh到8.2p1
- android apk sign,apk文件的sign以及align命令
- 能自动翻译的软件-最精准的翻译软件
- 特征金字塔(FPN)
- Python WOE的使用
- 新手开淘宝网店怎样一个月安全达到一钻
热门文章
- macOS Big Sur 11.6.5 (20G527) 正式版 ISO、PKG、DMG、IPSW 下载
- 只能上QQ,不能打开网页的解决办法
- win10无敌隐身术
- CF# Educational Codeforces Round 3 F. Frogs and mosquitoes
- 2021-09-25 WPF上位机 29-3D绘图的对象,变形,鼠标操控,鼠标事件,2D在3D中展示
- 如何走向真正的智能?
- 计算机mc mr,【科普贴】计算器上的GT、CE、AC、MU、MC、MR、M-、M+都是什么?
- 怎样清理苹果电脑磁盘空间_Mac空间不足怎么办,快速清理Mac系统垃圾与磁盘|Crucial(英睿达)...
- IPQ807X/IPQ50XX/IPQ60XX art关闭mac地址随机化设置
- openerp QWeb