代码及内容源自《Fluent Python》——Luciano Ramalho 著

在slice和range中排除掉最后一项的约定非常适合从0开始的计数方法,如Python,C等等。其便利之处在于:

  • 在只给出结束位置的情况下,容易看出slice或者range的长度,如range(3)和my_list[:3]的返回结果都包含三项。
  • 在给出开始和结束位置的情况下,易于计算slice或者range的长度,只需 stop - start
  • 可以方便地在任意位置将一个序列分成两部分且不会重叠,比如 my_list[:x],my_list[x:].
>>> l=[10,20,30,40,50,60]
>>> l[:2]  
[10, 20]
>>> l[2:]
[30, 40, 50, 60]
>>> l[:3]
[10, 20, 30]
>>> l[3:]
[40, 50, 60]

s[a:b:c]通过定义跨越幅度c,可以在slice的过程中跳过特定项。c可以为负值,即返回值反序。

>>> s='bicycle'
>>> s[::3]
'bye'
>>> s[::-1]
'elcycib'
>>> s[::-3]
'eyb'

a:b:c的记法用作指数或下标时,仅在[]中有效,它会生成一个slice对象:slice(a:b:c)。在检查表达式seq[satrt:stop:step]时,Python实际上会调用seq.__getitem__(slice(start, stop, step))。了解这一点非常有用,因为它能帮助你给slices赋予名字。

>>> invoice="""
... 0.....6.................................40........52...55........
... 1909  Pimoroni PiBrella                     $17.50    3    $52.50
... 1489  6mm Tactile Switch x20                 $4.95    2     $9.90
... 1510  Panavise Jr. - PV-201                 $28.00    1    $28.00
... 1601  PiTFT Mini Kit 320x240                $34.95    1    $34.95
... """
>>> SKU=slice(0,6)
>>> DESCRIPTION=slice(6,40)
>>> UNIT_PRICE=slice(40,52)
>>> QUANTITY=slice(52,55)
>>> ITEM_TOTAL=slice(55,None)
>>> line_items=invoice.split('\n')[2:]
>>> for item in line_items:
...    print(item[UNIT_PRICE], item[DESCRIPTION])
    $17.50   Pimoroni PiBrella                 $4.95   6mm Tactile Switch x20            $28.00   Panavise Jr. - PV-201             $34.95   PiTFT Mini Kit 320x240
>>> invoice
'\n0.....6.................................40........52...55........\n1909  Pimoroni PiBrella                     $17.50    3    $52.50\n1489  6mm Tactile Switch x20                 $4.95    2     $9.90\n1510  Panavise Jr. - PV-201                 $28.00    1    $28.00\n1601  PiTFT Mini Kit 320x240                $34.95    1    $34.95\n'

Slice不仅能够用于从序列中提取信息,也能够用于在适当的位置改变一个可变序列。

>>> l=list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[2:5]=[20,30]
>>> l
[0, 1, 20, 30, 5, 6, 7, 8, 9]
>>> del l[5:7]
>>> l
[0, 1, 20, 30, 5, 8, 9]
>>> l[3::2]=[11,22]
>>> l
[0, 1, 20, 11, 5, 22, 9]
>>> l[2:5]=100
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-20-321a846f91d2> in <module>()
----> 1 l[2:5]=100TypeError: can only assign an iterable
>>> l[2:5]=[100]
>>> l
[0, 1, 100, 22, 9]

如果赋值的对象是slice,那么右项必须是一个可迭代对象,即使只有一项。

Python学习笔记(五)—— Slicing相关推荐

  1. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

  2. Python学习笔记(五)—LOOP 循环

    个人认为Python基础学习直到LOOP才算真正开始. 循环有While, do-while, 和for() 比如while 我们要输出100条"you are my sunshine &q ...

  3. 【懒懒的Python学习笔记五】

    在这一章中,你将学习到能够将信息关联起来的Python字典,将学习如何访问和修改字典中的信息,同时也会学习如何遍历字典中的数据. 一.一个简单的字典 新建了一个存储用户信息的字典,里面存储了用户姓名. ...

  4. Python学习笔记五:条件循环

    文章目录 一.再谈print和import 1. 打印多个参数 2. 导入时重命名 二.赋值魔法 1. 序列解包 2. 链式赋值 3. 增强赋值 三.代码块:缩进的乐趣 四.条件和条件语句 1. 这正 ...

  5. Python学习笔记五--条件和循环

    5.1 if语句 没什么好说,if语句语法如下: if expression: expr_true_suit 5.1.1多重条件表达式 单个if语句可以通过布尔操作符and,or,not实现多重条件判 ...

  6. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  7. Python学习笔记总结

    了解了python语言后,决定以后使用python来进行各项工作,因此一直想要深入学习python.千里之行始于足下,万事开头难. 由于最近在准备写毕业论文,陆陆续续学习了Python的语法知识. P ...

  8. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  9. python学习笔记(五)缩进

    python学习笔记(五)缩进 原作:http://www.cnblogs.com/vamei/archive/2012/05/29/2524706.html 笔记: #!/usr/bin/env p ...

  10. 5岁自学python编程-python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹...

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

最新文章

  1. 以太网实习_一位工科男在拿到华为实习生offer后的面经干货
  2. JavaScript事件对象
  3. 如何去找一些还没有完全上市的 在私募投资的公司 D轮左右 财经媒体
  4. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot
  5. rest 验证demo_如何实现REST资源的输入验证
  6. Qt第五课 无构造函数可以接受源类型,或构造函数重载决策不明确
  7. Hibernate单表开发步骤
  8. fastjson jsonobject 转bean失败_FastJson是如何导致App Crash的
  9. 在集合点的同步 CyclicBarrier
  10. 如何在繁忙的工作中锻炼身体?
  11. 图片传输_VBox6无线传输器 商业摄影师必备利器
  12. php 7.4 Array and string offset access syntax with curly braces is deprecated
  13. Charles Https 请求 SSL乱码问题 charles unreadable
  14. unity3d AssetBundle 资源热更专题
  15. python 邮件分类_python_NLP实战之中文垃圾邮件分类
  16. 模拟人生4修改服务器,模拟人生4常用秘籍与修改技巧心得
  17. html 5 flash 播放器开发
  18. 量子科技商业化寻路,资本造势但技术落地成难|科股宝
  19. 0起步的摄影初学笔记
  20. 换地方上网后Kali Linux 网络设置

热门文章

  1. python可以处理表格吗_【Python基础】Python可以处理excel表格吗
  2. vue脚手架创建项目失败,显示vue:无法加载文件
  3. java 实现 setTimeout 和 setInterval 效果
  4. 8266远程升级stc单片机-isp
  5. vapor mysql_基于Swift的Web框架Vapor2.0之MySQL模板
  6. linux手机内存碎片整理软件,讲解macOS和Linux不用碎片整理的原因,而Windows需要碎片整理...
  7. 怎样从别人的原理图中提取原理图库文件(part)?
  8. 【Android】“微信”apk中的“发现”和“我”两个模块的布局
  9. 为什么选择卡尔福导航仪
  10. 电动车控制系统中转速、温度、角位移等传感器信号处理设计方案