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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
python多进程共享变量
Apr 06 Python
解决Python requests 报错方法集锦
Mar 19 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
python实现最小二乘法线性拟合
Jul 19 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
Python 日志logging模块用法简单示例
Oct 18 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
Python 中由 yield 实现异步操作
May 04 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
python3 中使用urllib问题以及urllib详解
Aug 03 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中如何调用webservice的实例参考
2013/04/25 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Numpy 多维数据数组的实现
2020/06/18 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
妈妈活动方案
2014/08/15 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
2014年稽查工作总结
2014/12/20 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
仓库管理制度范本
2015/08/04 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
Python基本数据类型之字符串str
2021/07/21 Python