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检查指定文件是否存在的方法
Jul 06 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
python mac下安装虚拟环境的图文教程
Apr 12 Python
Django 路由控制的实现
Jul 17 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
python异常处理之try finally不报错的原因
May 18 Python
Python数据可视化图实现过程详解
Jun 12 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
Jun 16 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
下载给定网页上图片的方法
2014/02/18 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python中格式化字符串的四种实现
2020/05/26 Python
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
一套C#面试题
2013/10/09 面试题
超市5.1促销活动
2014/01/15 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
说明书范文
2014/05/07 职场文书
大四毕业生自荐书
2014/07/05 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
付款承诺函范文
2015/01/21 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
浅谈MySQL函数
2021/10/05 MySQL
python创建字典及相关管理操作
2022/04/13 Python
Nginx跨域问题解析与解决
2022/08/05 Servers