详解Python 切片语法


Posted in Python onJune 10, 2019

Python的切片是特别常用的功能,主要用于对列表的元素取值。使用切片也会让你的代码显得特别Pythonic。

切片的主要声明如下,假设现在有一个list,命名为alist:

alist = [0,1,2,3,4]

切片语法的基本形式为:

alist[start:stop:step]

可以看出对于列表的切片操作有三个参数,分别为:

  • start:起始位置
  • stop:终止位置
  • step:步长

三个参数都是可选参数,意义为list的下标,即index。step参数默认值为1。表现形式有以下几种:

alist[start:stop]
alist[start:]
alist[:stop]
alist[:]

  • 第一种方式指定了start与stop参数,从start指定的下标开始取alist的元素,直到stop-1,例如 a[1:3] 的结果为 [1,2] 。
  • 第二种方式会从start指定的下标开始,取alist剩余元素。例如 a[1:] 会得到 [1,2,3,4] 。
  • 第三种方式会从alist的开始,取list元素,直到下标为stop-1,例如 a[:4] 会得到结果 [0,1,2,3]
  • 第四种方式没有指定start与stop参数,则会返回整个列表。

需要注意的是, :stop 表示不在选定切片中的第一个值, alist[start:stop] 的取值类似于数学中的取值范围为 [start, stop) , 所以在步长默认为1的情况下, start-stop 的结果即为所取元素的数量。

负值用法

start与stop参数为负值

start与stop的值可以是负值,表示取值是从list的最后开始,而不是开头。 例如:

alist[-1]
alist[-3:]
alist[:-1]

[2,3,4]
[0,1,2,3]

step参数为负值

step为负值时候表示将列表逆向,最简单的例子如下:

alist[::-1]

输出结果为 [4,3,2,1,0] 。这个例子实际是以下面的这个形式返回,

[alist[-1], alist[-1-step], ..., alist[0]]

即从倒数第一个元素开始,每一步加上步长,因为这里步长为负数,所以是减法,直到alist的开头。 知道这个原理,就能明白一些加上了start与stop参数的复杂写法,例如:

指定了start参数

alist[1::-1]

实际上是这样返回:

[alist[1], alist[1-step], ..., alist[0]]

因此,返回的是 [1,0]

指定了stop参数

alist[:1:-1]

实际上是这样返回:

[alist[-1], alist[-1-step], ..., alist[stop+1]]

因此,返回的是 [4, 3, 2] 。

同时指定了start与stop参数

注意,由于是逆序,所以start参数应该大于stop参数。

alist[3:1:-1]

实际上是这样返回:

[alist[start], alist[start-step], ..., alist[stop+1]]

因此,返回的是 [3,2]

我们可以看出,

  • 如果指定了start参数,则从start参数index开始取元素,直到遇到stop下标或者list的第一个元素。
  • 如果未指定start参数,则从list倒数第一个元素开始,直到遇到stop下标或者list的第一个元素。

总结

切片语法的使用特别灵活,如果正确掌握了它的用法,能够简化你的代码。需要注意的是,Python也提供了slice类用于制造切片,例如:

alist[start:stop:step]

实际上等价于

alist[(slice(start,stop,step))]

以上所述是小编给大家介绍的Python 切片语法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
Python+django实现文件下载
Jan 17 Python
Python多进程原理与用法分析
Aug 21 Python
使用Python处理BAM的方法
Sep 28 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
python 3.6.7实现端口扫描器
Sep 04 Python
在python里创建一个任务(Task)实例
Apr 25 Python
django 装饰器 检测登录状态操作
Jul 02 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 #Python
Python 虚拟空间的使用代码详解
Jun 10 #Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 #Python
对Python 检查文件名是否规范的实例详解
Jun 10 #Python
java判断三位数的实例讲解
Jun 10 #Python
Python字符串的一些操作方法总结
Jun 10 #Python
利用selenium爬虫抓取数据的基础教程
Jun 10 #Python
You might like
德劲1103的维修打理经验
2021/03/02 无线电
php 归并排序 数组交集
2011/05/10 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
javascript call方法使用说明
2010/01/11 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
vue开发移动端底部导航条功能
2020/04/08 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
老干部工作先进集体事迹材料
2014/05/21 职场文书
学校春季防火方案
2014/06/08 职场文书
拉歌口号大全
2014/06/13 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS