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实现简单爬虫功能的示例
Oct 24 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
django将数组传递给前台模板的方法
Aug 06 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python tqdm实现进度条的示例代码
Nov 10 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 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/10/09 PHP
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python显示生日是星期几的方法
2015/05/27 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
python中dict()的高级用法实现
2019/11/13 Python
python3 简单实现组合设计模式
2020/07/02 Python
python爬取音频下载的示例代码
2020/10/19 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
保安的辞职报告怎么写
2014/01/20 职场文书
中秋节超市促销方案
2014/01/30 职场文书
项目负责人任命书
2014/06/04 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
文明单位汇报材料
2014/12/24 职场文书
趣味运动会简讯
2015/07/20 职场文书
给学校的建议书400字
2015/09/14 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android