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 把数据 json格式输出的实例代码
Oct 31 Python
基于Python的文件类型和字符串详解
Dec 21 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
flask框架视图函数用法示例
Jul 19 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
Python异常处理例题整理
Jul 07 Python
Python实现元素等待代码实例
Nov 11 Python
django框架两个使用模板实例
Dec 11 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
python 制作网站小说下载器
Feb 20 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判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python通过字典映射函数实现switch
2020/11/06 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
外企求职信范文分享
2013/12/31 职场文书
心理健康教育制度
2014/01/27 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
战友聚会主持词
2014/04/02 职场文书
八一建军节演讲稿
2014/09/10 职场文书
大学生活感想
2015/08/10 职场文书
2016中秋节问候语
2015/11/11 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang