前言

在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 序列操作之切片相关推荐

  1. python序列操作_序列操作

    [TOC] # 序列操作 ## all:**判断可迭代对象的每个元素是否都为True值** ~~~ >>> all([1,2]) #列表中每个元素逻辑值均为True,返回True T ...

  2. python序列操作函数有哪些_Python笔记--序列操作函数

    1All(): 判断给出的可迭代参数iterable中所有元素是否均为true,是则返回true,否则返回false.注:除了0,空,False外都算作true.空元组,空列表返回true. 语法:a ...

  3. python序列的切片的操作

    目录 1.切片对象的索引方式 2.列表元素的访问与修改 3.列表的切片 (1)获取列表全部的元素 (2)间断获取列表的元素 (3)从右往左获取全部元素 (4)利用切片修改元素值 4.字符串与元组的切片 ...

  4. python如何进阶提升_Python序列操作之进阶篇

    简介 Python 的序列(sequence)通常指一个可迭代的容器,容器中可以存放任意类型的元素.列表和元组这两种数据类型是最常被用到的序列,python内建序列有六种,除了刚刚有说过的两种类型之外 ...

  5. Python中的序列操作

    Python中的序列操作 分类: python undefined 官方手册:https://docs.python.org/3.7/library/stdtypes.html#sequence-ty ...

  6. Python序列(包括序列类型和常用操作)

    所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们. 为了更形象的认识序列,可以将它看做是一家旅店,那么店中的每个房间就如同序列存储数 ...

  7. python占位符用元组列表填充_python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示,python支持组合数 ...

  8. python元组 列表 字符串最后一个下标_python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列-字符串.列表.元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示,python支持组合数 ...

  9. 贝斯狸的 Python 之旅 -- 深入切片操作及原理

    我首先通过 input() 函数,接收了外部输入字符串,然后通过 list 函数的切片,实现了回文数,代码真的好简洁,我自己都佩服我自己,我也不知道小组长会问我切片原理,我好无奈呀. s = inpu ...

最新文章

  1. 让你android手机变平板,手机瞬间变平板 两种形态随意换_手机Android频道-中关村在线...
  2. SEO的操作流程梗概
  3. 2018年春季个人阅读计划
  4. 汇编 整数常量 实数常量 字符常量 字符串常量 保留字 标识符 伪指令 指令 nop指令
  5. scala 异步调用_非阻塞异步Java 8和Scala的Try / Success / Failure
  6. 学习:Web安装项目创建桌面快捷方式及重写安装类(转)
  7. Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)
  8. 如何解决PHP startup: Unable to load dynamic library的错误
  9. OpenGL基础51:泛光
  10. 组合数计算(从1000到1e9的组合数各类求法)
  11. 电脑正下方显示桌面和计算机,电脑桌面下方的显示栏怎么设置
  12. requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘****, port=80): Max retries exceeded w
  13. java中文转英文_eclipse英文转中文怎么设置 eclipse中英文切换图文教程
  14. QQ快速登录协议分析以及风险反思
  15. 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT
  16. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 果酱 API 教程
  17. fmri|SPM contrast manager
  18. unity 转微信小游戏 资源优化
  19. OSChina 周五乱弹 ——论HR的日常心塞
  20. 缩点 CF893C Rumor

热门文章

  1. 漫谈企业级SaaS的多租户设计
  2. 网易技术干货 | 云信移动端音视频UI自动化测试实践
  3. 1024程序员福利日 | 网易云送暖心礼包,只要你是程序员
  4. 没文化连广告都看不懂—“网易密码信破解”【续】
  5. 江苏联合阿里云启动“1+30+300”工程 制造业大省欲打造智造模板
  6. Server2012Web方式修改用户名密码
  7. 软件项目经理新手上路2 - 力量从哪里来?
  8. Hyper-V实战:高可用性-网络规划篇(Hyper-V1.0)
  9. 【Python】选择数组中的数,拼接成一个最大字符串数(易错题,cmp_to_key举例)
  10. GO中方法和函数的区别