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进阶教程之词典、字典、dict
Aug 29 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
Python实现的文本对比报告生成工具示例
May 22 Python
目前最全的python的就业方向
Jun 05 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
Python进程池Pool应用实例分析
Nov 27 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
Python 如何展开嵌套的序列
Aug 01 Python
如何基于Python实现word文档重新排版
Sep 29 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
pandas取dataframe特定行列的实现方法
May 24 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
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
javascript实现评分功能
2020/06/24 Javascript
python中split方法用法分析
2015/04/17 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
物理研修随笔感言
2014/02/14 职场文书
大学生工作自荐书
2014/06/16 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2015国庆节感想
2015/08/04 职场文书
2016年教师新年寄语
2015/08/18 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP