Python cookbook(数据结构与算法)对切片命名清除索引的方法


Posted in Python onMarch 13, 2018

本文实例讲述了Python对切片命名清除索引的方法。分享给大家供大家参考,具体如下:

问题:如何清理掉到处都是硬编码的切片索引

解决方案:对切片命名

假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件):

########0123456789012345678901234567890123456789012345678901234567890123456789
record='....................100.......513.25..........'
cost=int(record[20:23])*float(record[30:36])

与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰许多。

SHARES=slice(20,23) #对切片命名
PRICE=slice(30,36) #对切片命名
cost=int(record[SHARES])*float(record[PRICE])

一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> items[a]
[2, 3]
>>> items[2:4]
[2, 3]
>>> items[a]=[77,88]
>>> items
[0, 1, 77, 88, 4, 5, 6]
>>> del items[a]
>>> items
[0, 1, 4, 5, 6]
>>>

如果有一个slice对象的实例s,可以分别通过s.starts.stop以及s.step属性来得到关于该对象的信息。

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> a.start
2
>>> a.stop
4
>>> a.step
>>> b=slice(1,5,2)
>>> b
slice(1, 5, 2)
>>> b.start
1
>>> b.stop
5
>>> b.step
2
>>>

另外,可以通过使用indices(size)方法将切片映射到特定大小的序列上。这会返回一个(start,stop,step)元组,所有的值都已经恰当地限制在边界以内(当做索引操作时可避免出现IndexError异常)

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> a.start
2
>>> a.stop
4
>>> a.step
>>> b=slice(1,5,2)
>>> b
slice(1, 5, 2)
>>> b.start
1
>>> b.stop
5
>>> b.step
2
>>> s='HelloWorld'
>>> a.indices(len(s))
(2, 4, 1)
>>> b.indices(len(s))
(1, 5, 2)
>>> items[a]
[2, 3]
>>> items[b]
[1, 3]
>>> for i in range(*a.indices(len(s))):
  print(s[i])
l
l
>>> for i in range(*b.indices(len(s))):
  print(s[i])
e
l
>>> c=slice(0,8,2)
>>> c
slice(0, 8, 2)
>>> for i in range(*c.indices(len(s))):
  print(s[i])
H
l
o
o
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中编写数据库模块的教程
Apr 29 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
python django中8000端口被占用的解决
Dec 17 Python
python numpy数组复制使用实例解析
Jan 10 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
基于python实现可视化生成二维码工具
Jul 08 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 Python
Django使用Celery异步任务队列的使用
Mar 13 #Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 #Python
python Celery定时任务的示例
Mar 13 #Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 #Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 #Python
Python+Django搭建自己的blog网站
Mar 13 #Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 #Python
You might like
PHP环境搭建最新方法
2006/09/05 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
匡威德国官网:Converse德国
2019/01/26 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
单位消防安全制度
2014/01/12 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
求职简历中自我评价
2014/01/28 职场文书
网络技术专业求职信
2014/02/18 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
python状态机transitions库详解
2021/06/02 Python
Python 键盘事件详解
2021/11/11 Python
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android