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检测手机QQ在线状态的脚本代码
Feb 10 Python
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
Python下的Mysql模块MySQLdb安装详解
Apr 09 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
python剪切视频与合并视频的实现
Mar 03 Python
Python实现数字的格式化输出
Aug 01 Python
pytorch 如何使用batch训练lstm网络
May 28 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
其他功能
2006/10/09 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
PHP学习笔记之数组篇
2011/06/28 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
php文件读取方法实例分析
2015/06/20 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
python创建临时文件夹的方法
2015/07/06 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
python中使用np.delete()的实例方法
2021/02/01 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
简单说说tomcat的配置
2013/05/28 面试题
优秀学生自我鉴定范例
2013/12/18 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
行政经理岗位职责
2015/04/15 职场文书
中学教代会开幕词
2016/03/04 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL