Python 序列操作之切片
前言
在Python所有序列中,有几种通用的操作,包括:索引、切片、相加、相乘和成员资格的检查。 其中切片算是 Python 的序列操作中比较特别的一种用法, 使用起来非常方便,并且功能也十分强大。今天主要总结关于切片的用法里面几个容易出错的点。
切片的简写
先来看个简答的示例:
>>> a = [1,2,3,4,5,6,7,8,9,10]
>>> a[2:4]
[3, 4]
>>> a[1:5]
[2, 3, 4, 5]
如上所示,切片适合于提取序列的一部分,其中的编号非常重要:第一个索引是包含的第一个元素的编号,但第二个索引是切片后余下的第一个元素的编号。
简而言之就是,提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但是第二个索引指定的元素不包含在切片内。
如果要从列表末尾开始数,可使用负数索引,例如:
>>> a[-4:-1]
[7, 8, 9]
这样好像不能输出最后一个列表中最后一个数字。如果使用索引0,即到达列表末尾后再前进一步所处的位置,结果如下:
>>> a[-4:0]
[]
所以这里需要注意的是:在执行切片操作时,如果第一个索引指定的元素位于第二个索引指定的元素后面,那么结果就为空序列。
这里-4指定的元素为7,而0指定的元素为1,所以上面的语句返回为空序列。
那如果要输出序列的最后一个值,可以使用一种简写:如果切片结束于序列末尾,可省略第二个索引,如下:
>>> a[-4:]
[7, 8, 9, 10]
同样,如果切片始于序列开头,可省略第一个索引:
>>> a[:4]
[1, 2, 3, 4]
那如果要复制整个序列,可以两个索引都省略:
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
更大的步长
切片操作时,我们通常显式或隐士地指定起点和终点,但通常省略另一个参数,即步长。在普通的切片中,步长为1。
示例:
>>> a[1:6:2]
[2, 4, 6]
上面代码显式指定了步长。如果步长大于1,将跳过一些元素,比如上面指定步长为2,那么将从七点和终点之间每隔一个元素提取一个元素。
使用步长时,前面两个指定也可以省略,如下:
>>> a[::3]
[1, 4, 7, 10]
注意:步长不能为0,否则无法移动。
示例:
>>> a[1:5:0]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero
如果步长为负数,将从右到做提取元素。
示例如下:
>>> a[6:1:-1]
[7, 6, 5, 4, 3]
>>> a[::-2]
[10, 8, 6, 4, 2]
>>> a[1:8:-2]
[]
>>> a[5::-2]
[6, 4, 2]
>>> a[:5:-2]
[10, 8]
如果是第一次接触切片,对于上面的输出结果,可能会有些意外,比如a[1:8:-2]输出为空序列,这里是有点不太好理解,总结为以下几点,实在不懂,那就只能死记硬背啦。
1.当步长为负数时,第一个索引必须比第二个索引大,否则输出为空序列;
2.当步长为负数时,可以省略起始或结束索引,省略索引后,就不存在一定要第一个索引必须比第二个索引大了
3.步长为正数时,索引从起点到终点,而步长为负数时,索引从终点到起点。
切片在序列中用得非常多,但是有很多小细节需要注意,要不然很容易出错,也正是因为这些特殊的语法,才体现了 Python 与其它语言的不同之处吧。
本文知识点来源于书籍《Python 基础教程》第三版。
Python 序列操作之切片相关推荐
- python序列操作_序列操作
[TOC] # 序列操作 ## all:**判断可迭代对象的每个元素是否都为True值** ~~~ >>> all([1,2]) #列表中每个元素逻辑值均为True,返回True T ...
- python序列操作函数有哪些_Python笔记--序列操作函数
1All(): 判断给出的可迭代参数iterable中所有元素是否均为true,是则返回true,否则返回false.注:除了0,空,False外都算作true.空元组,空列表返回true. 语法:a ...
- python序列的切片的操作
目录 1.切片对象的索引方式 2.列表元素的访问与修改 3.列表的切片 (1)获取列表全部的元素 (2)间断获取列表的元素 (3)从右往左获取全部元素 (4)利用切片修改元素值 4.字符串与元组的切片 ...
- python如何进阶提升_Python序列操作之进阶篇
简介 Python 的序列(sequence)通常指一个可迭代的容器,容器中可以存放任意类型的元素.列表和元组这两种数据类型是最常被用到的序列,python内建序列有六种,除了刚刚有说过的两种类型之外 ...
- Python中的序列操作
Python中的序列操作 分类: python undefined 官方手册:https://docs.python.org/3.7/library/stdtypes.html#sequence-ty ...
- Python序列(包括序列类型和常用操作)
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们. 为了更形象的认识序列,可以将它看做是一家旅店,那么店中的每个房间就如同序列存储数 ...
- python占位符用元组列表填充_python字符串列表元组序列操作
Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示,python支持组合数 ...
- python元组 列表 字符串最后一个下标_python字符串列表元组序列操作
Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示,python支持组合数 ...
- 贝斯狸的 Python 之旅 -- 深入切片操作及原理
我首先通过 input() 函数,接收了外部输入字符串,然后通过 list 函数的切片,实现了回文数,代码真的好简洁,我自己都佩服我自己,我也不知道小组长会问我切片原理,我好无奈呀. s = inpu ...
最新文章
- 让你android手机变平板,手机瞬间变平板 两种形态随意换_手机Android频道-中关村在线...
- SEO的操作流程梗概
- 2018年春季个人阅读计划
- 汇编 整数常量 实数常量 字符常量 字符串常量 保留字 标识符 伪指令 指令 nop指令
- scala 异步调用_非阻塞异步Java 8和Scala的Try / Success / Failure
- 学习:Web安装项目创建桌面快捷方式及重写安装类(转)
- Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)
- 如何解决PHP startup: Unable to load dynamic library的错误
- OpenGL基础51:泛光
- 组合数计算(从1000到1e9的组合数各类求法)
- 电脑正下方显示桌面和计算机,电脑桌面下方的显示栏怎么设置
- requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘****, port=80): Max retries exceeded w
- java中文转英文_eclipse英文转中文怎么设置 eclipse中英文切换图文教程
- QQ快速登录协议分析以及风险反思
- 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT
- Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 果酱 API 教程
- fmri|SPM contrast manager
- unity 转微信小游戏 资源优化
- OSChina 周五乱弹 ——论HR的日常心塞
- 缩点 CF893C Rumor
热门文章
- 漫谈企业级SaaS的多租户设计
- 网易技术干货 | 云信移动端音视频UI自动化测试实践
- 1024程序员福利日 | 网易云送暖心礼包,只要你是程序员
- 没文化连广告都看不懂—“网易密码信破解”【续】
- 江苏联合阿里云启动“1+30+300”工程 制造业大省欲打造智造模板
- Server2012Web方式修改用户名密码
- 软件项目经理新手上路2 - 力量从哪里来?
- Hyper-V实战:高可用性-网络规划篇(Hyper-V1.0)
- 【Python】选择数组中的数,拼接成一个最大字符串数(易错题,cmp_to_key举例)
- GO中方法和函数的区别