详解Python 切片语法
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参数,则会返回整个列表。
- 第五种方式点击进入,免费领取高品质python学习资料大全,适合在校大学生,小白,想转行,想提升自己的都可以加入。
需要注意的是, :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 的二元算术运算,为什么说减法只是语法糖?
原题 | Unravelling binary arithmetic operations in Python 作者 | Brett Cannon 译者 | 豌豆花下猫("Python猫&q ...
- 举例详解Python中的split()函数的使用方法
这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:sp ...
- 详解Python中re.sub--转载
[背景] Python中的正则表达式方面的功能,很强大. 其中就包括re.sub,实现正则的替换. 功能很强大,所以导致用法稍微有点复杂. 所以当遇到稍微复杂的用法时候,就容易犯错. 所以此处,总结一 ...
- 详解python的装饰器decorator
装饰器本质上是一个python函数,它可以让其它函数在不需要任何代码改动的情况下增加额外的功能. 装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志,性能测试,事务处理,缓存, ...
- Angular6 学习笔记——组件详解之模板语法
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- 详解Python模块导入方法
python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...
- 详解python函数的参数
详解python函数的参数 一.参数的定义 1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- 详解Python编程中基本的数学计算使用
详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...
随机推荐
- [学习笔记] 在Eclipse中导入项目
参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.
- [转载]oracle xml操作
/*=====================生成\修改xml========================= */ --xmlelement多个标签层级 SELECT XMLELEMENT(&qu ...
- Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...
- tp3.2判断修改成功
save方法的返回值是影响的记录数,如果返回false则表示更新出错,因此一定要用恒等来判断是否更新失败. 一开始用这种判断, if (!$edit_flag && $edit_fla ...
- S1. Android 功能大全
[概述] 这篇文章主要描述安卓开发中可能实现的功能点. [准备工作] IDE:Android Studio,简单操作 如何创建一个 Android 项目 Android 项目结构分析 Androidm ...
- [转帖]Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险
Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险 https://www.toutiao.com/i6723512458482303499/ certutil md5sums ...
- Visual Studio中Debug与Release以及x86、x64、Any CPU的区别
Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经 ...
- java项目报错 :A class file was not written. The project may be inconsistent...
问题: 打开ecplise,发现我的几个项目报错,上午还用的好好的,整我一脸懵,出现那么多错误还都是一种问题,错误提示翻译过来是:(类文件找不到) : 问题经过具体描述: 不只是在我的springMV ...
- final关键字、多态 (札记)
目录 protected fianl 子父类中同名的 private 方法 java中的前期绑定 免疫多态 谁先被执行,构造器 还是 初始化? 协变返回类型 <Thinking in java& ...
- HashSet和HashMap
HashMap 概念和特征 概念:以键值对的形式存储数据,由键映射到值,核心在于Key上. 特征:键不能重复,值可以重复:key-value允许为null. HashMap Since ...