详解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 相关文章推荐
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
python处理xml文件的方法小结
May 02 Python
Python paramiko模块的使用示例
Apr 11 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
Python类中self参数用法详解
Feb 13 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 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
杏林同学录(九)
2006/10/09 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
javascript中json基础知识详解
2017/01/19 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
python的Template使用指南
2014/09/11 Python
通过cmd进入python的实例操作
2019/06/26 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
质检的岗位职责
2013/11/17 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
公务员保密承诺书
2014/03/27 职场文书
汽车促销活动方案
2014/03/31 职场文书
公司周年庆典标语
2014/10/07 职场文书
给老师的感谢信
2015/01/20 职场文书
清洁工个人总结
2015/03/04 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Python实现单例模式的5种方法
2021/06/15 Python