4Python切片功能剖析
引用文章: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切片功能剖析相关推荐
- scala切片_Scala切片功能
scala切片 Today we will look into Scala slice function. 今天,我们将研究Scala slice功能. 斯卡拉切片 (Scala slice) Sca ...
- 蓝鲸智云功能剖析介绍
蓝鲸功能剖析&介绍 概要: 简单看了一下蓝鲸平台的内容. 整个架构都是依赖了一个长连接的agent (tcp)能够通过这个agent来实现很多功能.如: push 脚本给collector p ...
- 微信网页开发 分享功能剖析
微信网页开发 分享功能剖析 步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 步骤二:引入J ...
- [翻译] NumSharp的数组切片功能 [:]
原文地址:https://medium.com/scisharp/slicing-in-numsharp-e56c46826630 翻译初稿(英文水平有限,请多包涵): 由于Numsharp新推出了数 ...
- mysql profiling详解_使用mysql profiling功能剖析单条查询
5.1版本开始引入show profile剖析单条语句功能,支持show profiles和show profile语句,参数have_profiling;控制是否开启: 查看是否支持这个功能(查询为 ...
- dede image.class.php,DEDE模板下载织梦DEDE 核心类TypeLink.class.php功能剖析
DedeCMS 核心类TypeLink.class.php摘要笔记,学习php就是借鉴与剖析,让我们的学会的更多. 注:'//+' 表示为本人另外加上的注释 Class TypeLink { var ...
- 【自动驾驶行业观察】奥迪A8自动驾驶功能剖析
原文作者:陈光(百度无人驾驶工程师) 原文链接: https://zhuanlan.zhihu.com/p/33260873 前言 作为一名在主机厂研究自动驾驶的工程师,经常在朋友圈或新闻报道中看到各 ...
- NetSuite 中国现金流量表功能剖析
作为中国本地化包中的重要组成,现金流量表(CFS)一直处于基本"不可用"的状态.用户抱怨,"报表生成后,出错却不知从而入手".顾问也是浅尝辄止,改用间接法处理. ...
- python数字切片_剖析python切片「:」「::-1」「-1::」
剖析python切片[:][::-1][-1::] 我们在面试python相关职位时,总是会碰到一些面试python切片的试题,另外在解决某些问题时也经常会用到切片操作,因此勇哥在这里给大家详细介绍p ...
最新文章
- 专业|尧德中:脑器交互学,一个发展中的新学科
- linux+xampp搭建WordPress个人网站过程详解
- go-ethereum环境搭建及目录结构介绍
- Spring could 使用Feign超时问题
- vue使用Google Map
- 编写Nginx启停服务脚本
- 主定理(master theorem)学习小记
- 前端学习(1926)vue之电商管理系统电商系统之美化一层循环的UI结构for循环渲染第二层结构
- Android安卓进程保活(二)
- Jmeter系列之数据库操作
- 变量声明和定义及extern 转载
- 利用MDTools和Hydraw设计专业的液压阀块
- Hive窗口函数的使用
- Python编程从入门到实践(第2版)个人学习笔记
- 家用计算机手抄报,大学计算机作业手抄报
- excel表格内容合并的技巧?
- .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇
- OPNET win7安装
- JavaWeb是什么?如何学习JavaWeb的体系
- HTML + CSS + JS做一个绘画分享网站[开源项目]
热门文章
- ARM 指令集 VS Thumb 指令集
- Exynos4412 Uboot 移植(五)—— Uboot 移植过程
- 汇编常用命令、指令一览
- Linux 命令出现号(大于号)如何退出
- [react] Mern和Yeoman脚手架有什么区别?
- react学习(26)---获取antdesign的form数据
- [html] 写一个标签云的布局
- [css] 行内元素和块级元素有什么区别,如何相互转换?
- [css] 举例说明在css3中怎么实现背景裁剪?
- 前端学习(2697):重读vue电商网站18之监听图片删除事件