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的Twisted框架实现一个简单的服务器
Apr 16 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
用Python逐行分析文件方法
Jan 28 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
django Admin文档生成器使用详解
Jul 22 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
超实用的 30 段 Python 案例
Oct 10 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
Python参数传递对象的引用原理解析
May 22 Python
python 闭包函数详细介绍
Apr 19 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
php 数组元素快速去重
2017/05/05 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
六个窍门助你提高Python运行效率
2015/06/09 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python将字符串转换成json的方法小结
2019/07/09 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
安全例会汇报材料
2014/08/23 职场文书
共青团员自我评价范文
2014/09/14 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server