详解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 相关文章推荐
有趣的python小程序分享
Dec 05 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
python实现dijkstra最短路由算法
Jan 17 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
pyinstaller还原python代码过程图解
Jan 08 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
基于Python实现射击小游戏的制作
Apr 06 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
PHP学习之整理字符串
2011/04/17 PHP
PHP中用hash实现的数组
2011/07/17 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
简述Python中的进程、线程、协程
2016/03/18 Python
python直接访问私有属性的简单方法
2016/07/25 Python
用python处理MS Word的实例讲解
2018/05/08 Python
自定义django admin model表单提交的例子
2019/08/23 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
Python偏函数实现原理及应用
2020/11/20 Python
python装饰器代码深入讲解
2021/03/01 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
2014年汽车销售工作总结
2014/12/01 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
OpenFeign实现远程调用
2022/08/14 Java/Android