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中文编码那些事
Jun 25 Python
python字典基本操作实例分析
Jul 11 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
深入浅析Python传值与传址
Jul 10 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
python eventlet绿化和patch原理
Nov 21 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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删除文件夹的三种方法
2013/06/09 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
深入认识javascript中的eval函数
2009/11/02 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
python遍历数组的方法小结
2015/04/30 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
浅谈python对象数据的读写权限
2016/09/12 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python递归实现快速排序
2018/08/18 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
python excel和yaml文件的读取封装
2021/01/12 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
资源环境与城市管理专业推荐信
2013/11/30 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB