详解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 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
Ubuntu下安装PyV8
Mar 13 Python
利用pandas读取中文数据集的方法
Jul 25 Python
python3+requests接口自动化session操作方法
Oct 13 Python
python如何查看微信消息撤回
Nov 27 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Django框架models使用group by详解
Mar 11 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
Python中的xlrd模块使用原理解析
May 21 Python
Pytest之测试命名规则的使用
Apr 16 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注释实例技巧
2008/10/03 PHP
CI框架常用函数封装实例
2016/11/21 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
javascript 禁止复制网页
2009/06/11 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
Vue指令指令大全
2019/02/09 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python从入门到精通(DAY 3)
2015/12/20 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
自主招生自荐信格式
2013/12/03 职场文书
办理居住证介绍信
2014/01/15 职场文书
有关打架的检讨书
2014/01/25 职场文书
授权委托书范本
2014/04/03 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
教师个人考察材料
2014/12/16 职场文书
工程部岗位职责
2015/02/10 职场文书
北大自主招生自荐信
2015/03/04 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书