详解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 pass 语句使用示例
Mar 11 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python3多线程操作简单示例
May 22 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
Python获取时间戳代码实例
Sep 24 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
python 串行执行和并行执行实例
Apr 30 Python
Django通过json格式收集主机信息
May 29 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
python 制作本地应用搜索工具
Feb 27 Python
python之基数排序的实现
Jul 26 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 和 MySQL 基础教程(一)
2006/10/09 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
mpvue跳转页面及注意事项
2018/08/03 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Keras设置以及获取权重的实现
2020/06/19 Python
Python中生成ndarray实例讲解
2021/02/22 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
交通事故协议书范本
2016/03/19 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
python缺失值的解决方法总结
2021/06/09 Python