引用文章:https://mp.weixin.qq.com/s/NZ371nKs_WXdYPCPiryocw

切片基础法则:

(1)公式[i : n : m],i为起始位置索引(当i为首位0可省略),i+n为结束位置索引(当n为长度len(li)可省略),m为步长,默认1,禁止0。

(2)i, n同号:从序列的第i位索引起,向右取n-i位,按m间隔过滤。

i, n异号:从序列的第i位索引起,向右取(len(list)-n)-i位,按m间隔过滤。

切片法则推导:

(1)当m>0,且 i>0 时:从第 i 位起,取 n-i 位元素(i, n同号)  |  取 (lenlist)-n)-i 位元素(i, n异号);

(2)当m>0,且 i<0 时:从倒数第 |i| 位起,取 n-i 位元素(i, n同号)  |  取 (n-len(list))-i 位元素(i, n异号);

(3)当m<0, 且 i>0 时:先翻转列表,从第 i 位起,取 n-i 位元素(i, n同号)  |  取 (lenlist)-n)-i 位元素(i, n异号);

(3)当m<0, 且 i<0 时:先翻转列表,从倒数第 |i| 位起,取 n-i 位元素(i, n同号)  |  取 (n-len(list))-i 位元素(i, n异号);

表示整个列表:其中 X >= len(li)

li[0:X] == li[0:] == li[:X] == li[:] == li[::] == li[-X:X] == li[-X:]

切片高级法则:

切片的返回结果:一个新的序列,占用新的内存地址,是属于浅拷贝

 1 #: 切片返回新的序列,占用新的内存地址
 2 In[2]: li = [1,2,3,4]
 3 In[3]: lo=li[::]
 4 In[4]: id(li)
 5 Out[4]: 2316742428488
 6 In[5]: id(lo)
 7 Out[5]: 2316740137416
 8
 9 #: 切片属于浅拷贝
10 In[6]: lii = [1, [2,3,4], 3, 4]
11 In[7]: loo = lii[:2]
12 In[8]: id(lii[1])
13 Out[8]: 2316742399880
14 In[9]: id(loo[1])
15 Out[9]: 2316742399880

给切片赋值可迭代对象,可以达到列表实现拼接、替换的操作

列表拼接:使用“纯占位符”将两个列表拼接成一个列表

In[2]: li = [1, 2, 3, 4]#: 拼接到头部
In[3]: li[:0] = [0]
In[4]: li
Out[4]: [0, 1, 2, 3, 4]#: 拼接到尾部
In[5]: li[len(li):] = [5, 7]
In[6]: li
Out[6]: [0, 1, 2, 3, 4, 5, 7]#:拼接到中部
In[7]: li[6:6] = [6]
In[8]: li
Out[8]: [0, 1, 2, 3, 4, 5, 6, 7]

列表替换:使用“非纯占位符”将一个列表的部分内容替换为另一个列表内容

 1 In[2]: li = [1, 2, 3, 4]
 2
 3 #: 头部替换
 4 In[3]: li[:3] = [7, 8, 9]
 5 In[4]: li
 6 Out[4]: [7, 8, 9, 4]
 7
 8 #: 尾部替换
 9 In[5]: li[3:] = [5, 6, 7]
10 In[6]: li
11 Out[6]: [7, 8, 9, 5, 6, 7]
12
13 #: 中部替换
14 In[7]: li[2:4] = ['a', 'b']
15 In[8]: li
16 Out[8]: [7, 8, 'a', 'b', 6, 7]
17
18 #: 非等长替换
19 In[9]: li[2:4] = [1, 2, 3, 4]
20 In[10]: li
21 Out[10]: [7, 8, 1, 2, 3, 4, 6, 7]
22
23 In[11]: li[2:6] = ['a']
24 In[12]: li
25 Out[12]: [7, 8, 'a', 6, 7]
26
27 del li[2:3]  # [7, 8, 6, 7]

自定义切片的功能:__getitem__() 方法用于切片功能

怎么判断一个对象是否实现了这个方法呢?

1 hasattr('abc', '__getitem__')

迭代、迭代对象、迭代器?

迭代:是一种遍历容器类型对象(例如字符串、列表、字典等等)的方式。

迭代对象:实现__iter__() 魔术方法的对象都是可迭代对象。

迭代器:

  • 可迭代对象不等于迭代器
  • 可迭代对象可以变为迭代器

  “一同两不同”,两者都有__iter__(),迭代对象的__getitem__()变为__next__()就成为跌倒器

  可迭代对象只能被“它遍历”,迭代器却还可以“自遍历”。

要实现迭代器拥有切片的功能?添加__getitem__() 方法。

通过借助 itertools 模块 islice() 方法,我们能实现迭代器切片,将两者的优势相结合,其主要用途在于截取大型迭代器(如无限数列、超大文件等等)的片段,实现精准的处理,从而大大地提升性能与效率。

转载于:https://www.cnblogs.com/1fengchen1/p/10271157.html

4Python切片功能剖析相关推荐

  1. scala切片_Scala切片功能

    scala切片 Today we will look into Scala slice function. 今天,我们将研究Scala slice功能. 斯卡拉切片 (Scala slice) Sca ...

  2. 蓝鲸智云功能剖析介绍

    蓝鲸功能剖析&介绍 概要: 简单看了一下蓝鲸平台的内容. 整个架构都是依赖了一个长连接的agent (tcp)能够通过这个agent来实现很多功能.如: push 脚本给collector p ...

  3. 微信网页开发 分享功能剖析

    微信网页开发 分享功能剖析 步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 步骤二:引入J ...

  4. [翻译] NumSharp的数组切片功能 [:]

    原文地址:https://medium.com/scisharp/slicing-in-numsharp-e56c46826630 翻译初稿(英文水平有限,请多包涵): 由于Numsharp新推出了数 ...

  5. mysql profiling详解_使用mysql profiling功能剖析单条查询

    5.1版本开始引入show profile剖析单条语句功能,支持show profiles和show profile语句,参数have_profiling;控制是否开启: 查看是否支持这个功能(查询为 ...

  6. dede image.class.php,DEDE模板下载织梦DEDE 核心类TypeLink.class.php功能剖析

    DedeCMS 核心类TypeLink.class.php摘要笔记,学习php就是借鉴与剖析,让我们的学会的更多. 注:'//+' 表示为本人另外加上的注释 Class TypeLink { var ...

  7. 【自动驾驶行业观察】奥迪A8自动驾驶功能剖析

    原文作者:陈光(百度无人驾驶工程师) 原文链接: https://zhuanlan.zhihu.com/p/33260873 前言 作为一名在主机厂研究自动驾驶的工程师,经常在朋友圈或新闻报道中看到各 ...

  8. NetSuite 中国现金流量表功能剖析

    作为中国本地化包中的重要组成,现金流量表(CFS)一直处于基本"不可用"的状态.用户抱怨,"报表生成后,出错却不知从而入手".顾问也是浅尝辄止,改用间接法处理. ...

  9. python数字切片_剖析python切片「:」「::-1」「-1::」

    剖析python切片[:][::-1][-1::] 我们在面试python相关职位时,总是会碰到一些面试python切片的试题,另外在解决某些问题时也经常会用到切片操作,因此勇哥在这里给大家详细介绍p ...

最新文章

  1. 专业|尧德中:脑器交互学,一个发展中的新学科
  2. linux+xampp搭建WordPress个人网站过程详解
  3. go-ethereum环境搭建及目录结构介绍
  4. Spring could 使用Feign超时问题
  5. vue使用Google Map
  6. 编写Nginx启停服务脚本
  7. 主定理(master theorem)学习小记
  8. 前端学习(1926)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第二层结构
  9. Android安卓进程保活(二)
  10. Jmeter系列之数据库操作
  11. 变量声明和定义及extern 转载
  12. 利用MDTools和Hydraw设计专业的液压阀块
  13. Hive窗口函数的使用
  14. Python编程从入门到实践(第2版)个人学习笔记
  15. 家用计算机手抄报,大学计算机作业手抄报
  16. excel表格内容合并的技巧?
  17. .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇
  18. OPNET win7安装
  19. JavaWeb是什么?如何学习JavaWeb的体系
  20. HTML + CSS + JS做一个绘画分享网站[开源项目]

热门文章

  1. ARM 指令集 VS Thumb 指令集
  2. Exynos4412 Uboot 移植(五)—— Uboot 移植过程
  3. 汇编常用命令、指令一览
  4. Linux 命令出现号(大于号)如何退出
  5. [react] Mern和Yeoman脚手架有什么区别?
  6. react学习(26)---获取antdesign的form数据
  7. [html] 写一个标签云的布局
  8. [css] 行内元素和块级元素有什么区别,如何相互转换?
  9. [css] 举例说明在css3中怎么实现背景裁剪?
  10. 前端学习(2697):重读vue电商网站18之监听图片删除事件