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中的zip函数使用示例
Jan 29 Python
Python运算符重载用法实例分析
Jun 01 Python
python生成式的send()方法(详解)
May 08 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
python开发游戏的前期准备
May 05 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
Python操作redis和mongoDB的方法
Dec 19 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
Python实战之疫苗研发情况可视化
May 18 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 empty函数判断mysql表单是否为空
2010/04/12 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
Angular的$http与$location
2016/12/26 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
关于Vue组件库开发详析
2018/07/01 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
python中随机函数random用法实例
2015/04/30 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
Python下简易的单例模式详解
2019/04/08 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
python调用webservice接口的实现
2019/07/12 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
土建资料员岗位职责
2014/01/04 职场文书
应届生自荐信范文
2014/02/21 职场文书
节能减耗标语
2014/06/21 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python